Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
WPF

Как внедрить модель во viewModel?

26.12.2024, 11:19. Показов 25488. Ответов 295
Метки mvvm (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый. Есть у меня метод в проекте, который вызывается из конструктора. Метод по типу "Получить все из бд и вывести на экран".

Смущает меня то, как именно я это делаю. Когда происходит загрузка, UI блокируется. Да и в целом все очень медленно и дальше будет только хуже с добавлением данных.

Теперь код.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class BirdsViewModel : ObservableObject
{
    // [B]Конструктор[/B]
    public BirdsViewModel(IBirdRepository birdRepository, Func<BirdEntity, BirdViewModel> birdView) // [B]Прошу обратить 
//внимание на делегат. Его, думаю, и нужно заменять.[/B]
 
    {
        Birds = [];
        _birdView = birdView;
        _birdRepository = birdRepository;
        LoadBirds();
    }
 
// [B]Проблемный метод[/B]
private async void LoadBirds()
{
    var birds = await _birdRepository.GetAllAsync(); // [B]Получение данных из БД[/B]
    switch (Name)
    {
        default:
            foreach (var bird in birds)
                Birds.Add(_birdView(bird)); // [B]С помощью делегата я во ViewModel передаю Entity, 
//с которой та и работает. Есть ли другие методы подобной реализации, чтобы у каждой ViewModel был свой Entity?[/B]
            break;
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.12.2024, 11:19
Ответы с готовыми решениями:

Как из ViewModel UserControl'a изменить свойство в ViewModel главного окна?
Недавно начал попытки создавать приложение WPF с применением MVVM, и у меня возник вопрос, который не даёт мне продвигаться в разработке...

Как зарегистрировать ViewModel через Autofac, создав между ViewModel и нужным View DataContext связь?
Доброго времени суток. Есть желание при регистрации ViewModel'и сразу же &quot;подключиться&quot; к DataContext'у у нужной View, как например: ...

WPF получить доступ из одной viewmodel к другой viewmodel
Собственно есть у меня две viewmodel, mainviewmodel и settingsviewmodel, в mainviewmodel есть вот такая штука private Visibility...

295
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
22.04.2025, 16:53
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 2033 Посмотреть сообщение
По поводу INDE пока добавил его в базовую VM.
Методы изменения валидации (AddError и т.п.) должны быть protected.



Цитата Сообщение от 2033 Посмотреть сообщение
Вот только не понимаю как и где вызвать RaiseCanExecuteChanged. А то команду подвязал к HasErrors, но надо событие изменения вызывать.
Всюду где есть зависимость HasErrors, надо подымать INPC для него. И лучше сделать через присвоение значения:
Например:
C#
1
2
3
4
5
6
7
8
public bool HasErrors {get => Get<bool>(); private set => Set(value);}
 
protected void AddError
{
    // Some Code
 
    HasErrors = _propertyerrors.Count > 0;
}
Тогда зависимость от HasErrors можно прописать в производном классе в методе OnPropertyChanged
C#
1
2
3
4
5
6
7
protected overide void OnPropertyChanged(string propertyName, object? oldValue, object? newValue)
{
     if(propertyName == nameof(HasErrors))
     {
         SomeCommand.RaiseCanExecuteChanged();
     }
}
Добавлено через 5 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Например:
Не увидел метода RaiseErorrsChanged.
Он же подымается для любого изменения валидации.
Вот в него и нужно перед поднятием события добавить HasErrors = _propertyerrors.Count > 0;.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
23.04.2025, 13:13  [ТС]
Элд Хасп, по изменениям.
Методы AddError, RaiseErrorsChanged, ClearErrors теперь protected.

Пришлось видоизменить базовый метод GetErrors, так как почти ничего не меняя сегодня он стал выкидывать исключения, хотя вчера все работало. Исключение на propertyName - оно либо empty, либо null.

Теперь метод выглядит так.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public IEnumerable GetErrors([CallerMemberName] string? propertyName = null)
{
    if (string.IsNullOrEmpty(propertyName) || !_propertyErrors.ContainsKey(propertyName))
        return null;
 
    return _propertyErrors[propertyName]!;
}
 
А был так. Я понимаю, что тут специально выкидывалось исключение на null или empty, но почему вчера все норм было.
 
public IEnumerable GetErrors([CallerMemberName] string? propertyName = null)
{
    ArgumentException.ThrowIfNullOrEmpty(propertyName);
    return _propertyErrors.GetValueOrDefault(propertyName) ?? [];
}
В главную vm переопределил OnPropertyChanged.
У вас там в комментариях было указано, что лучше сперва вызывать базовый метод.
C#
1
2
3
4
5
6
7
8
protected override void OnPropertyChanged(string propertyName, object? oldValue, object? newValue)
{
    base.OnPropertyChanged(propertyName, oldValue, newValue);
    if (propertyName == nameof(HasErrors))
    {
        SaveWordCommand.RaiseCanExecuteChanged();
    }
}
В этот метод не заходит, должно быть я что-то упустил.

Добавлено через 7 минут
Уже вижу, что пустое имя свойства тоже нужно обрабатывать. Интересно почему HashSet, у меня вот лист под ошибки. И вложенный цикл - разве это норм? Или расчет на то, что ошибок много не бывает и все будет быстро?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
23.04.2025, 18:22
Цитата Сообщение от 2033 Посмотреть сообщение
Интересно почему HashSet
Чтобы не проверять одинаковые ошибки. Если добавляется такая же, то просто игнорируется. А в лиcnt будет дважды одна и та же ошибка.

Цитата Сообщение от 2033 Посмотреть сообщение
И вложенный цикл - разве это норм?
У каждого свойства своя коллекция ошибок.
Если имя свойства пустое, то нужно вывести ошибки по всем свойствам.
Что может быть оптимальнее двойного цикла для этой задачи?

Цитата Сообщение от 2033 Посмотреть сообщение
Или расчет на то, что ошибок много не бывает и все будет быстро?
Нет.
Расчёт на то, что должны быть возвращены все ошибки по всем свойствам.

Добавлено через 33 минуты
Цитата Сообщение от 2033 Посмотреть сообщение
В этот метод не заходит, должно быть я что-то упустил.
Я писал выше:
Цитата Сообщение от Элд Хасп Посмотреть сообщение
И лучше сделать через присвоение значения:
Вот полный код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System.Collections;
using System.ComponentModel;
using System.Runtime.CompilerServices;
 
namespace Flashcards.Liblary.ViewModelBase
{
    public abstract partial class ViewModelBase : INotifyDataErrorInfo
    {
        private readonly Dictionary<string, List<string>?> _propertyErrors = [];
 
        public bool HasErrors { get => Get<bool>(); private set => Set(value); }
 
        public event EventHandler<DataErrorsChangedEventArgs>? ErrorsChanged;
 
        public IEnumerable GetErrors([CallerMemberName] string? propertyName = null)
        {
            if (string.IsNullOrEmpty(propertyName))
            {
                foreach (var errors in _propertyErrors)
                {
                    foreach (var error in errors.Value ?? [])
                    {
                        yield return error;
                    }
                }
            }
            else
            {
                foreach (var error in _propertyErrors.GetValueOrDefault(propertyName) ?? [])
                    yield return error;
            }
        }
 
        protected void AddError(string errorMessage, [CallerMemberName] string? propertyName = null)
        {
            ArgumentException.ThrowIfNullOrEmpty(propertyName);
            if (!_propertyErrors.ContainsKey(propertyName))
            {
                _propertyErrors.Add(propertyName, []);
            }
 
            _propertyErrors[propertyName]!.Add(errorMessage);
            RaiseErrorsChanged(propertyName);
        }
 
        protected void RaiseErrorsChanged([CallerMemberName] string? propertyName = null)
        {
            HasErrors = _propertyErrors.Count != 0;
            ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName));
        }
 
        protected void ClearErrors([CallerMemberName] string? propertyName = null)
        {
            ArgumentException.ThrowIfNullOrEmpty(propertyName);
            if (_propertyErrors.Remove(propertyName))
                RaiseErrorsChanged(propertyName);
        }
    }
}
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
24.04.2025, 10:26  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вот полный код:
У меня только метод GetErrors отличается немного. Проблема сейчас с тем, чтобы обновить CanExecute команды.

Добавлено через 1 минуту
C#
1
setVM => !HasErrors
У меня сейчас такая функция у CanExecute команды и в этой же VM переопределен метод OnPropertyChanged. Но в него не заходит.

C#
1
2
3
4
5
6
7
8
protected override void OnPropertyChanged(string propertyName, object? oldValue, object? newValue)
{
    base.OnPropertyChanged(propertyName, oldValue, newValue);
    if (propertyName == nameof(HasErrors))
    {
        SaveWordCommand.RaiseCanExecuteChanged();
    }
}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
24.04.2025, 10:42
Цитата Сообщение от 2033 Посмотреть сообщение
Но в него не заходит.
Информации не достаточно. По вашим объяснениям, вроде, всё верно сделано.
Нужен код для отладки в Студии.
Где актуальный код?
Вечером смогу глянуть.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
24.04.2025, 10:51  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Где актуальный код?
https://github.com/Londongrad/Flashcards-3.0

Команда в MainVM находится. И еще, изменив метод GetErrors на тот, что вы скинули начали происходить какие-то странности.



Я добавляю ошибку только по текст боксу Word, остальное все само обводится. Надо будет потом обводку красную заменить на вот тот крестик. Он мне больше нравится.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
24.04.2025, 11:16
Цитата Сообщение от 2033 Посмотреть сообщение
Я добавляю ошибку только по текст боксу Word, остальное все само обводится. Надо будет потом обводку красную заменить на вот тот крестик. Он мне больше нравится.
Общая валидация (это когда запрос без имени свойства) запрашивается при биндинге без Path к экземпляру реализующему INDEI.
В основном, это когда идёт привязка DataContext.
Сейчас нет времени посмотреть, но скорее всего у вас идёт привязка Content к экземпляру Word, Word попадает в DataContext элементов созданных шаблоном данных и это и вызывает запрос общей валидаци.

Добавлено через 1 минуту
Попробуйте в биндинге Content задать ValidatesOnDataErrors=false
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
24.04.2025, 11:45  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Попробуйте в биндинге Content задать ValidatesOnDataErrors=false
Добавил в главное окно
XML
1
2
3
4
5
<ContentControl Grid.Column="1"
                Margin="20"
                Content="{Binding Path=(comm:INavigationService.Current),
                                  ValidatesOnDataErrors=false}">
</ContentControl>
Теперь вся обводка пропадает, когда поле Word заполняется, но появляется снова, как только пустеет. И на старте приложения тоже все обведено, так как поле пустое.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
24.04.2025, 13:50
Цитата Сообщение от 2033 Посмотреть сообщение
Теперь вся обводка пропадает, когда поле Word заполняется, но появляется снова, как только пустеет.
Я не так часто с валидацией работаю.
Помню, что сталкивался с такой проблемой и как-то её решал. Но вот не помню как.
Смогу только вечером посмотреть.

Если можете глянуть, то посмотрите это обводка вокруг ContentControl или вокруг главного элемента шаблона контента?
Если разберётесь, то задайте ему пустой шаблон валидации в Validation.ErrorTemplate.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
24.04.2025, 15:05  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
задайте ему пустой шаблон валидации в Validation.ErrorTemplate.
Задал у ContentCotrol.
XML
1
Validation.ErrorTemplate="{x:Null}"
Теперь он не обводится, но все еще обводятся кнопки.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
24.04.2025, 15:36
В кнопках биндинги только к командам?
Если, да - то не должны обводиться, если GetErrors по имени команд ничего не возвращает.
Надо дебагером пройтись и проверить.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
24.04.2025, 17:23  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В кнопках биндинги только к командам?
Вот первая кнопка. Только команда с параметром. Вторая точно такая же.

XML
1
2
3
4
5
6
<Button Command="{Binding CreateSetCommand,
                          Mode=OneWay,
                          Source={StaticResource mainVM}}"
        CommandParameter="{Binding}"
        Content="Create only set"
        Style="{StaticResource CSButtons}"/>
Добавлено через 1 час 42 минуты
Элд Хасп, потыкав в отладчике слишком часто заходит в GetErrors, по несколько раз для одного свойства + куча раз для пустого свойства и каждый раз возвращается одна и та же ошибка, которую я добавил для свойства Word. Уж не знаю должно ли так быть.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
25.04.2025, 00:40
Цитата Сообщение от 2033 Посмотреть сообщение
Вот первая кнопка. Только команда с параметром. Вторая точно такая же.
Ошибка валидации в кнопке вызывается биндингом параметра.
Нужно задать: CommandParameter="{Binding ValidatesOnNotifyDataErrors=False}"
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
25.04.2025, 02:36  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Ошибка валидации в кнопке вызывается биндингом параметра.
Нужно задать: CommandParameter="{Binding ValidatesOnNotifyDataErrors=False}"
Окей, но мне аж в трех местах пришлось что-то добавлять, это норма? Это при том, что прежний метод GetErrors работал без таких ошибок валидации.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
25.04.2025, 07:38
Цитата Сообщение от 2033 Посмотреть сообщение
Окей, но мне аж в трех местах пришлось что-то добавлять, это норма? Это при том, что прежний метод GetErrors работал без таких ошибок валидации.
Это область "срезания углов", то есть отклонения от паттерна, которые упрощают реализацию "здесь и сейчас".

Допустим, вы реализовали в ViewModel INDEI без вывода общей ошибки.
Отдали эту реализацию дальше в разработку View.
Там вывод общей ошибки не был нужен они приняли эту реализацию.
Но потом решили всё же вывести для пользователя список ошибок почему он не может кликнуть по кнопке.
Обращаются для этого к выводу общей валидации, а там бац и отказывается, что его нет.
Дают задание на доработку.
Прислали им новую реализацию.
Приложение начали эксплуатировать. И оказалось пользователям и так понятно почему кликать нельзя, и вывод ошибок перегружает GUI.
Меняют View и дают новое задание на уровень VM - убрать общие ошибки.

Какой вывод из этого примера?
мы получили явную зависимость VM от хотелок View.
А весь смысл архитектурных паттернов (в том числе MVVM), в том чтобы не было таких зависимостей.
В данном случае этого можно добиться только полной реализацией INDEI.
Нужно использовать или нет общий вывод ошибок View - это уже задача тех кто разрабатывает View.
Тем более что это ещё зависит и от значений по умолчанию.
Сейчас у ValidatesOnNotifyDataErrors значение по умолчанию True.
Но насколько помню, раньше во Framework значение по умолчанию было False и там где был нужен вывод валидации всегда нужно было явно ставить ValidatesOnNotifyDataErrors=True.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
25.04.2025, 08:34  [ТС]
Элд Хасп, теперь понятно.

Вы по кнопке не смотрели, почему CanExecuteChanged не поднимается?

Добавлено через 9 минут
Элд Хасп, как я понял в if мне нужно будет поместить метод по определению уникальности слова. Но как сделать ожидание в этот момент? Типа значок загрузки на случай, если все долго.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
/// <summary>Название слова для добавления в сет</summary>
public string Word {  get => Get<string>()!; 
    set 
    {
        ClearErrors();
        if (string.IsNullOrEmpty(value))
        {
            AddError("");
        }
        
        Set(value); 
    } 
}
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
25.04.2025, 08:55  [ТС]
Элд Хасп, а должен ли реп находится в библиотеке? Разве это не относится к модели? Делал как у вас в птицах.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
25.04.2025, 09:13
Цитата Сообщение от 2033 Посмотреть сообщение
а должен ли реп находится в библиотеке? Разве это не относится к модели? Делал как у вас в птицах.
Репозиторий - это часть Бизнес логики.
Но реализуют его по разному.
Иногда это отдельная сборка.
В таком случае, можно заменять в модели репозитории разных реализаций без перекомпиляции модели. Например, перейти с SQLite на MySQL.
В других случаях сборка модели включает в себя репозиторий, так даже в теории в будущем не может возникнуть задачи по его замене.

Строгих правил нет. Надо определяться от ТЗ на разработку.
Но опытные разработчики обычно всегда реализуют репозиторий в отдельной сборке, даже если в этом нет явной необходимости "здесь и сейчас".

Добавлено через 8 минут
Цитата Сообщение от 2033 Посмотреть сообщение
Вы по кнопке не смотрели, почему CanExecuteChanged не поднимается?
У вас зависимость команды от MainViewModel.HasErrors.
А меняете вы CreateSetViewModel.HasErrors.

Для синхронного кода достаточно:
C#
82
83
84
                },
                setVM => !setVM.HasErrors
            );
Для асинхронного - придётся как-то создавать зависимость SaveWordCommand.RaiseCanExecuteChanged от CreateSetViewModel.HasErrors.

Добавлено через 1 минуту
Один из вариантов - это привязка Button.IsEnabled к CreateSetViewModel.HasErrors.

Добавлено через 3 минуты
Цитата Сообщение от 2033 Посмотреть сообщение
Но как сделать ожидание в этот момент? Типа значок загрузки на случай, если все долго.
Сейчас быстро ответить не смогу.
Вечером или завтра.

В общих словах - нужно создавать состояния валидации разных типов. На состояние "валидация в процессе" - один шаблон ошибки, на состояние "ошибка валидации" - другой шаблон ошибки.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
25.04.2025, 09:49  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
У вас зависимость команды от MainViewModel.HasErrors.
А меняете вы CreateSetViewModel.HasErrors.
Не знал, что для разных классов разные свойства. Думал, что оно одно и находится в ViewModelBase, на него и пытался ссылаться.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
25.04.2025, 10:02  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Один из вариантов - это привязка Button.IsEnabled к CreateSetViewModel.HasErrors.
Я так полагаю нужен конвертер, потому как привязать IsEnabled к противоположенному значению HasErrors не выходит.

Добавлено через 7 минут
Элд Хасп, получается какое-то разделение логики кнопок. Где-то команды решают, можно ли нажать кнопку, а где-то кнопка сама отключается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.04.2025, 10:02

Mvvm ViewModel в ViewModel
Есть одно окошко там много вкладок, в каждой вкладке есть подвкладки и там много разных таблиц и кнопок. ViewModel будет просто огромной,...

Как внедрить БД в exe на VB 6.0
Hi! Есть база на Access 7.0 и проект на VB 6.0. Можно ли как-нибудь всунуть .mdb файл в exe-шник, чтобы никто не мог его открыть и...

Как внедрить функцию
Здравствуйте, есть программа которая считает в edit сколько открывающихся скобок и закрывающихся. мой код выглядит так: procedure...

как с внедрить свой код
Всем привет! Не подскажите как можно создать свою папку в вордпресссом и внедрить свой код. Сейчас есть сайт на вордпресс, там нужно...

Как внедрить ProgressBar в макрос
Добрый день! почитал соседние темки на эту тему, нашел у товарища analyst архив с замечательными формами ProgressBar но так как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
280
Ответ Создать тему
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru