• Где писать desktop приложений на C++ под Windows?

    JRK_DV
    @JRK_DV
    Рецепты https://codepen.io/jrkdv/full/LKLXdq
    Спорный конечно ответ, если говорить в области windows\desktop
    webdev, мобильные приложения, ios, android - всё это отпадает
    gamedev - тот же С++/udk
    QT - имхо стоит учить, если планируется писать вне зависимости от платформы windows

    Чистый WinAPI для windows\desktop будет самое лучшее специализированное решение + понимание именно той области что вам интересна. Даст вам общее представление как работают программы в Windows.
    Для углубленного изучения уже нужны более точные ориентиры, что именно вы будете\хотите разрабатывать
    Ответ написан
    5 комментариев
  • Какую книгу по SQL стоит прочитать для изучения?

    zoroda
    @zoroda
    Необычный Fullstack
    Совсем кратко - в моём учебнике
    Более продвинуто: на сайте Postgres PRO
    Ответ написан
    Комментировать
  • Как сохранить данные с WinForm?

    arxont
    @arxont
    C# программист
    Как вариант можете сохранять в XML. Вот пример кода, который пробегается по всем TextBox`ам и сохраняет их в
    файл
    const string filename = "file.xml";
    private void Form1_Load(object sender, EventArgs e)
    {
        if (!File.Exists(filename)) return;
    
        var doc = XDocument.Load(filename);
    
        foreach (Control control in this.Controls)
        {
            if (control is TextBox)
            {
                var element = doc.Root.Elements().FirstOrDefault(x => x.Name == control.Name);
                control.Text = (element != null) ? element.Value : "";
            }
        }
    }
    
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        var element = new XElement("Settings");
    
        foreach (Control control in this.Controls)
        {
            if (control is TextBox)
            {
                element.Add(new XElement(control.Name, control.Text));
            }
        }
    
        XDocument doc = new XDocument(element);
        doc.Save(filename);
    }
    Ответ написан
    1 комментарий
  • Как сохранить данные с WinForm?

    @d-stream
    Готовые решения - не подаю, но...
    Правильный путь - вязать к полям формы поля объекта, читать-сохранять - объект. Точнее научить объект сохраняться при необходимости и загружаться например при создании.

    Извращенный - крутиться циклом по всем элементам формы и читать-писать пары имя-значение, потом иметь море секса при изменении/переименовании элементов -)
    Ответ написан
    Комментировать
  • Как сохранить данные с WinForm?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Вообще, я бы сделал бы модель данных, привязал бы ее к контролам через DataBindings и сохранял/загружал бы уже именно ее.

    Пример с формой входа (на форме два текстовых поля, txtUserName и txtPassword, и две кнопки, buttonSave и buttonLoad):
    Форма
    public partial class Form1 : Form
    {
        private readonly LoginViewModel viewModel;
    
        public Form1()
        {
            InitializeComponent();
    
            viewModel = new LoginViewModel();
    
            txtUserName.DataBindings.Add(new Binding("Text", viewModel, "UserName", false, DataSourceUpdateMode.OnPropertyChanged));
            txtPassword.DataBindings.Add(new Binding("Text", viewModel, "Password", false, DataSourceUpdateMode.OnPropertyChanged));
    
        }
    
        private void buttonSave_Click(object sender, EventArgs e)
        {
            var file = GetFilePath();
    
            using (var buffer = File.OpenWrite(file))
            {
                var formatter = new BinaryFormatter();
    
                formatter.Serialize(buffer, viewModel);
            }
        }
    
        private void buttonLoad_Click(object sender, EventArgs e)
        {
            var model = LoadContent() as LoginViewModel;
    
            if (model != null)
            {
                viewModel.Password = model.Password;
                viewModel.UserName = model.UserName;
            }
        }
    
        private static object LoadContent()
        {
            var file = GetFilePath();
    
            if (!File.Exists(file))
                return null;
    
            using (var buffer = File.OpenRead(file))
            {
                var formatter = new BinaryFormatter();
    
                try
                {
                    return formatter.Deserialize(buffer);
                }
                catch
                {
                    //TODO Add error handling
                    return null;
                }
            }
        }
    
        private static string GetFilePath()
        {
            var directory = Path.GetDirectoryName(typeof(Form1).Assembly.Location);
            return Path.Combine(directory, "store.txt");
        }
    }


    Модель:
    [Serializable]
    public class LoginViewModel : INotifyPropertyChanged
    {
        private string _userName;
        private string _password;
    
        public string UserName
        {
            get { return _userName; }
            set
            {
                _userName = value;
                NotifyPropertyChanged(nameof(UserName));
            }
        }
    
        public string Password
        {
            get { return _password; }
            set
            {
                _password = value;
                NotifyPropertyChanged(nameof(Password));
            }
        }
    
        private void NotifyPropertyChanged(string name)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }
    
        [field: NonSerialized]
        public event PropertyChangedEventHandler PropertyChanged;
    }


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

    Один из вариантов обхода, это именно DataBindings, как я показал на примере.
    Ответ написан
    Комментировать
  • Обработка персональных данных, куда давать инфу?

    @other_letter
    Не хотите нанимать специалиста - почитайте сами.
    Нигде не требуется отдельной формы. Оператор один? Значит и соглашение одно. Оставьте в FAQ или где-то в футере ссылку и всего делов.
    По кукам - ХЗ что Вы там храните. Если ПДн есть - значит, надо. Если нету - зачем?
    И почитайте внимательно что именно имеется ввиду под ПДн. Если у Вас простая форма обратной связи - заморачиваться не стоит. Можете даже сократить до одного поля "имя" и всё. Игорь с номером телефона - не ПДн
    Ответ написан