Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 24.02.2022
Сообщений: 71
WPF

Сохранение данных из коллекции в файл (MVVM)

24.11.2022, 12:47. Показов 4324. Ответов 45

Студворк — интернет-сервис помощи студентам
Добрый день, форумчане!
Начал разрабатывать приложение на wpf+mvvm. Но столкнулся с отсутствием знаний с сохранением данных с учетом mvvm.
Задача следующая:
пользователь вводит данные, они сохраняются в коллекции ObservableCollection<T> и отображаются в DataGrid главного окна. Нужно сохранить эти данные, чтобы при повторном открытии приложения они снова отображались в DataGrid.
При этом коллекцию нужно отсортировать по свойству модели (тип свойства DateTime).
Искал, читал примеры по этой теме, но пока результата не добился

Добавлено через 35 минут

Класс модели:
C#
1
2
3
4
5
6
7
8
   internal class Reminder
    {
        public int IndexReminder { get; set; } //номер напоминания
        public string TittleReminder { get; set; } //заголовок
        public string MessageReminder { get; set; } //сообщение
        public DateTime DateTimeReminder { get; set; } //дата и время напоминания
        public bool statusReminder { get; set; } //статус выполнения напоминания
    }
ViewModel диаологового окна: Ввод данных, сохранение в ObservableCollection

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
internal class AddNewReminder_VM : Base_VM
    {
        #region заголовок окна
        private string _Tittle = "Новое напоминание++";
        /// <summary>Заголовок окна </summary>
        public string Tittle
        {
            get => _Tittle;
            set => Set(ref _Tittle, value);
        }
        #endregion
 
        #region Свойства, привязанные к окну "Новое напоминание"
 
        #region Заголовок
        // Заголовок
        private string _tittleNewReminder;
        public string TittleNewReminder
        {
            get => _tittleNewReminder;
            set=> Set(ref _tittleNewReminder, value);
        }
        #endregion
 
        #region Текст напоминания
        //Содержание напоминания
        private string _contentNewReminder;
        public string ContentNewReminder
        {
            get => _contentNewReminder;
            set => Set(ref _contentNewReminder, value);
        }
        #endregion
                
        #region Дата и время напоминания
 
        private DateTime _dateTimeNewReminder = DateTime.Now;
        public DateTime DateTimeNewReminder
        {
            get => _dateTimeNewReminder;
            set => Set(ref _dateTimeNewReminder, value);
        }
        #endregion
 
        
 
        #endregion
 
        #region Команда добавления нового напоминания
 
        public ICommand AddNewReminderCmd { get; }
        private bool CanAddNewReminderCmdExecute(object p) => true;
        private void OnAddNewReminderCmdExecuted(object p)
        {
            //Создание нового напоминания
            Reminder reminder = new Reminder();
            reminder.IndexReminder = Collections.Reminders.Count + 1;
            reminder.TittleReminder = TittleNewReminder;
            reminder.MessageReminder = ContentNewReminder;
            reminder.statusReminder = false;
            reminder.DateTimeReminder = DateTimeNewReminder;
 
            Collections.Reminders.Add(reminder);
 
 
        }
 
        #endregion
 
        #region Конструктор
        // Конструктор без парам
 
        public AddNewReminder_VM()
        {
            //Лямда-Команда создания нового напоминания
            AddNewReminderCmd = new LamdaCommand(OnAddNewReminderCmdExecuted, CanAddNewReminderCmdExecute);
            
 
        }
 
        #endregion
    }
DataGrid главного окна

XML
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
 <DataGrid AutoGenerateColumns="False"
                              CanUserAddRows="False"
                              CanUserDeleteRows="False"
                              CanUserReorderColumns="False"
                              IsReadOnly="True"
                              Background="LightGray"
                              ItemsSource ="{Binding Source={x:Static serv:Collections.Reminders}}"
                              SelectedItem="{Binding SelectedReminder}">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="Заголовок" 
                                                Width="250"
                                                Binding="{Binding TittleReminder}"/>
                            <DataGridTextColumn Header="Текст"
                                                Width="*"
                                                Binding="{Binding MessageReminder}">
                                <DataGridTextColumn.ElementStyle>
                                    <Style TargetType="TextBlock">
                                        <Setter Property="TextWrapping" Value="Wrap"/>
                                    </Style>
                                </DataGridTextColumn.ElementStyle>
                            </DataGridTextColumn>
                            <DataGridTextColumn Header="Дата напоминания"
                                                Width="200"
                                                Binding="{Binding DateTimeReminder, StringFormat={}{0:dd.MM.yyyy}}"/>
                            
                            <DataGridTextColumn Header="Время напоминания"
                                                Width="200"
                                                Binding="{Binding DateTimeReminder, StringFormat={}{0:HH:mm}}" />                            
                        </DataGrid.Columns>
                    </DataGrid>
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.11.2022, 12:47
Ответы с готовыми решениями:

WPF MVVM Бинарная сериализация коллекции классов
Всем привет. Вот есть задачка. Класс. class Employer : INotifyPropertyChanged { #region Properties ...

Программное заполнение коллекции и отображение в DataGrid с использованием MVVM
Здравствуйте. Только начинаю вникать в MVVM. Нашел такой пример: Модель: namespace MVVMTest.Model { public class Person :...

MVVM как при заполнении (изменении) коллекции ObservableCollection избежать копий
Есть ObservableCollection в которой хранится класс с полем Name. Надо чтоб при попытке задать имя элемента которое уже встречается в...

45
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.11.2022, 13:45
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Nickolass Посмотреть сообщение
Подскажи, плиз, может есть способ выполнять эту операцию быстрее?
Ускорить можно только изменив реализацию ObservableCollection.
Если её прослушивают, то на каждый Add будет вызываться все прослушки.
Нужно заглушить уведомление и вызвать один раз после полного добавления.

В стандартной ObservableCollection это невозможно.
0
0 / 0 / 0
Регистрация: 24.02.2022
Сообщений: 71
28.11.2022, 14:06  [ТС]
Andrey-MSK, с СУБД уже практика была) И с SQLite, и c MySQL. Спасибо) Сейчас нужно с файлами разобраться

Добавлено через 3 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Ускорить можно только изменив реализацию ObservableCollection.
Если её прослушивают, то на каждый Add будет вызываться все прослушки.
Нужно заглушить уведомление и вызвать один раз после полного добавления.
В стандартной ObservableCollection это невозможно.
Спасибо, понял) Это пока не мой уровень)

Подскажи еще, пожалуйста, почему свойство только для чтения?
Цитата Сообщение от Элд Хасп Посмотреть сообщение
// Свойство "только для чтения". То есть без сеттера.
        public static ObservableCollection<Reminder> Reminders { get; /* set; */} = new();
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.11.2022, 14:18
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Ускорить можно только изменив реализацию ObservableCollection.
Nickolass, написал "на скорую руку":
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
60
61
62
63
64
65
66
67
68
69
    public class ExtendedObservableCollectionExtend<T> : ObservableCollection<T>
    {
        public bool IsNotifiesFrozen { get; private set; }
        private static readonly PropertyChangedEventArgs IsNotifiesFrozenArgs = new(nameof(IsNotifiesFrozen));
        private static readonly PropertyChangedEventArgs ResetPropertiesArgs = new(string.Empty);
        private static readonly NotifyCollectionChangedEventArgs ResetCollectionArgs = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset);
        protected bool SetIsNotifiesFrozen(bool isNotifiesFrozen)
        {
            bool notEquals = IsNotifiesFrozen == isNotifiesFrozen;
            if (notEquals)
            {
                IsNotifiesFrozen = isNotifiesFrozen;
                if (isNotifiesFrozen)
                {
                    OnPropertyChanged(IsNotifiesFrozenArgs);
                }
                else
                {
                    OnPropertyChanged(ResetPropertiesArgs);
                    OnCollectionChanged(ResetCollectionArgs);
                }
            }
            return notEquals;
        }
 
        protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
        {
            if (!IsNotifiesFrozen)
            {
                base.OnCollectionChanged(e);
            }
        }
 
        protected override void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (!IsNotifiesFrozen || e == IsNotifiesFrozenArgs)
            {
                base.OnPropertyChanged(e);
            }
        }
 
        public int AddRange(IEnumerable<T> collection, bool isNotifiesFrozen)
        {
            if (isNotifiesFrozen)
                SetIsNotifiesFrozen(true);
            int count = 0;
            foreach (var item in collection)
            {
                Add(item);
                count++;
            }
 
            if (isNotifiesFrozen && count > 0)
                SetIsNotifiesFrozen(false);
            return count;
        }
        public int AddRange(IEnumerable<T> collection)
            => AddRange(collection, false);
 
        public void Reset(IEnumerable<T> collection)
            => Reset(collection, false);
        public void Reset(IEnumerable<T> collection, bool isNotifiesFrozen)
        {
            if (isNotifiesFrozen)
                SetIsNotifiesFrozen(true);
            Clear();
            AddRange(collection, isNotifiesFrozen);
        }
    }
Добавлено через 6 минут
Цитата Сообщение от Nickolass Посмотреть сообщение
Подскажи еще, пожалуйста, почему свойство только для чтения?
Для разработчика обижается, что статическое свойство всегда указывает на один и тот же экземпляр.

Например, в одном окне вы выводите это свойство:
C#
1
<ItemsControl ItemsSource="{x:Static somename:SomeClass.Reminders}"/>
А где в коде делаете так:SomeClass.Reminders = new (......);
В результате получите в Окне вывод одних элементов, а в коде будете работать с другой коллекцией.
И будете гадать: "Почему я меняю коллекцию, а Окно не обновляется?".
1
0 / 0 / 0
Регистрация: 24.02.2022
Сообщений: 71
28.11.2022, 14:18  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
написал "на скорую руку"
Круто) Где такому научиться?) Чтобы так писать на скорую руку)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.11.2022, 14:21
Цитата Сообщение от Элд Хасп Посмотреть сообщение
C#
20
OnCollectionChanged(ResetCollectionArgs);
Возможно этот вызов избыточен.
Надо протестировать.

Добавлено через 1 минуту
Цитата Сообщение от Nickolass Посмотреть сообщение
Где такому научиться?) Чтобы так писать на скорую руку)
Опыт, практика, документация, исходники, огромное количество разных задач, примеров.
0
0 / 0 / 0
Регистрация: 24.02.2022
Сообщений: 71
28.11.2022, 14:24  [ТС]
Элд Хасп,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Опыт, практика, документация, исходники, огромное количество разных задач, примеров.
У меня ни один год видимо уйдет)

Но есть к чему стремиться) Спасибо
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.11.2022, 14:26
Nickolass, ошибочка...
Чуть неверно реализовал методы Range:
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
 
namespace Core2022
{
    public class ExtendedObservableCollectionExtend<T> : ObservableCollection<T>
    {
        public bool IsNotifiesFrozen { get; private set; }
        private static readonly PropertyChangedEventArgs IsNotifiesFrozenArgs = new(nameof(IsNotifiesFrozen));
        private static readonly PropertyChangedEventArgs ResetPropertiesArgs = new(string.Empty);
        private static readonly NotifyCollectionChangedEventArgs ResetCollectionArgs = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset);
        protected bool SetIsNotifiesFrozen(bool isNotifiesFrozen)
        {
            bool notEquals = IsNotifiesFrozen == isNotifiesFrozen;
            if (notEquals)
            {
                IsNotifiesFrozen = isNotifiesFrozen;
                if (isNotifiesFrozen)
                {
                    OnPropertyChanged(IsNotifiesFrozenArgs);
                }
                else
                {
                    OnPropertyChanged(ResetPropertiesArgs);
                    OnCollectionChanged(ResetCollectionArgs);
                }
            }
            return notEquals;
        }
 
        protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
        {
            if (!IsNotifiesFrozen)
            {
                base.OnCollectionChanged(e);
            }
        }
 
        protected override void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (!IsNotifiesFrozen || e == IsNotifiesFrozenArgs)
            {
                base.OnPropertyChanged(e);
            }
        }
 
        public int AddRange(IEnumerable<T> collection, bool isNotifiesFrozen)
        {
            if (isNotifiesFrozen)
                SetIsNotifiesFrozen(true);
 
            int count = 0;
            foreach (var item in collection)
            {
                Add(item);
                count++;
            }
 
            if (isNotifiesFrozen)
                SetIsNotifiesFrozen(false);
            return count;
        }
        public int AddRange(IEnumerable<T> collection)
            => AddRange(collection, false);
 
        public void Reset(IEnumerable<T> collection)
            => Reset(collection, false);
        public void Reset(IEnumerable<T> collection, bool isNotifiesFrozen)
        {
            if (isNotifiesFrozen)
                SetIsNotifiesFrozen(true);
 
            Clear();
            AddRange(collection);
 
            if (isNotifiesFrozen)
                SetIsNotifiesFrozen(false);
        }
    }
}
Добавлено через 2 минуты
Цитата Сообщение от Nickolass Посмотреть сообщение
У меня ни один год видимо уйдет)
У меня от уровня "Слышал о Шарпе и даже не слышал о WPF" до уровня "начинающий++" прошло месяца четыре.
К этому времени уже сам стал другим объяснять как и что делать, писать какие-то гайды.
Можете по истории моих тем, вопросов на Форуме посмотреть.
0
0 / 0 / 0
Регистрация: 24.02.2022
Сообщений: 71
28.11.2022, 14:34  [ТС]
Элд Хасп, вот тут не совсем понимаю как использовать этот класс.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Чуть неверно реализовал методы Range
Добавить в проект, и коллекция будет уже не ObservableCollection<T>, а ExtendedObservableCollectionExtend<T>?
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,765
Записей в блоге: 4
28.11.2022, 15:04
Цитата Сообщение от Nickolass Посмотреть сообщение
Сейчас нужно с файлами разобраться
Ну тогда в методе чтения из файла записывайте в List<T>, а потом уже переводите в ObservableCollection<T> при загрузке VM. По крайней мере при работе с СУБД это работает очень быстро.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.11.2022, 15:12
Цитата Сообщение от Nickolass Посмотреть сообщение
Добавить в проект, и коллекция будет уже не ObservableCollection<T>, а ExtendedObservableCollectionExtend<T>?
Да.
Обычно такие классы добавляются в отдельный проект типа "Библиотека классов".
В основном проекте задаётся ссылка на проект библиотеки.
Типы из не1ё потом используются как обычные .Net типы.

Добавлено через 2 минуты
С этим классом обновление будет таким:
C#
10
11
12
13
        public static void ResetReminders(IEnumerable<Reminder> reminders)
        {
            Reminders.Reset(reminders, true);
        }
Остальные методы менять не нужно.
1
0 / 0 / 0
Регистрация: 24.02.2022
Сообщений: 71
28.11.2022, 15:21  [ТС]
Элд Хасп, спасибо еще раз) Буду разбираться. Можно по вашему коду здесь если что вопросы позадавать в будущем? (если появятся)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.11.2022, 15:26
Цитата Сообщение от Nickolass Посмотреть сообщение
Можно по вашему коду здесь если что вопросы позадавать в будущем? (если появятся)
Если по этой же теме - да.
Если слишком разрастётся я сам разделю тему.
0
0 / 0 / 0
Регистрация: 24.02.2022
Сообщений: 71
28.11.2022, 15:28  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если по этой же теме - да.
Если слишком разрастётся я сам разделю тему.
Спасибо)
0
0 / 0 / 0
Регистрация: 24.02.2022
Сообщений: 71
15.12.2022, 11:42  [ТС]
Элд Хасп, доброго дня!) Подскажите, пожалуйста, в чем может быть проблема? Ищу путь к папке через код:

C#
1
2
var exePath = AppDomain.CurrentDomain.BaseDirectory;
var path = Path.Combine(exePath + @"\..\..\..\Data\Reminders\");
Раньше находил, сейчас выдает очень длинную неправильную строчку:
"D:\\User\\Documents\\Visual Studio 2022\\WPF\\MemoryRefresher\\MemoryRefres her.Net\\bin\\Debug\\net6.0-windows\\\\..\\..\\..\\Data\\Reminders\"

Причем (повторюсь) раньше с этим кодом путь прописывался правильный, а теперь какой-то бред...
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,765
Записей в блоге: 4
15.12.2022, 11:53
Цитата Сообщение от Nickolass Посмотреть сообщение
\..\..\..\
Это означает - от текущего каталога подняться на три каталога вверх и перейти в каталог Data\Reminders.

Добавлено через 1 минуту
Nickolass, Описание путей: абсолютных, относительных, UNC и URL
0
0 / 0 / 0
Регистрация: 24.02.2022
Сообщений: 71
15.12.2022, 11:59  [ТС]
Andrey-MSK, Я это знаю) Только вверх не поднимается почему-то

Добавлено через 3 минуты
Из этой строчки
C#
1
var exePath = AppDomain.CurrentDomain.BaseDirectory;
Путь:
"D:\\User\\Документы\\Visual Studio 2022\\WPF\\NewTestMemory\\MemoryRefreshe r.Net\\bin\\Debug\\net6.0-windows"

А из этой:
C#
1
var path = Path.Combine(exePath + @"\..\..\..\Data\Reminders\");
"D:\\User\\Документы\\Visual Studio 2022\\WPF\\NewTestMemory\\MemoryRefreshe r.Net\\bin\\Debug\\net6.0-windows\\\\..\\..\\..\\Data\\Reminders"

В итоге ловлю ошибку, что путь не найден
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,765
Записей в блоге: 4
15.12.2022, 12:04
Цитата Сообщение от Nickolass Посмотреть сообщение
В итоге ловлю ошибку, что путь не найден
Конечно не будет найден. Где у вас по факту находится \Data\Reminders\?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
15.12.2022, 12:13
Цитата Сообщение от Nickolass Посмотреть сообщение
сейчас выдает очень длинную неправильную строчку:
После net6.0-windows четыре слеша \\\\? То есть, без экранировки два слеша подряд.
Вы явно не таким образом раньше получали строку.
Вам нужно:
C#
2
var path = Path.Combine(exePath, @"\..\..\..\Data\Reminders");
Какой смысл в вашем варианте использования Path.Combine, если по факту вы сами задаёте путь неправильной конкатенацией.
Поручите это методу. Пусть он сам верно комбинирует отрезки пути.
0
0 / 0 / 0
Регистрация: 24.02.2022
Сообщений: 71
15.12.2022, 12:21  [ТС]
Andrey-MSK,
по факту на 3 каталога выше) Представьте, ничего не менял, а заработало... Само блин) Чего-то может в системе глюкнуло?)

Добавлено через 7 минут
Элд Хасп,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы явно не таким образом раньше получали строку.
Именно таким, ничего не менял, честно)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
15.12.2022, 12:28
Цитата Сообщение от Nickolass Посмотреть сообщение
ничего не менял, а заработало... Само блин)
Посмотрите какая сейчас строка в var path.

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

Занесение данных в ListView1 и сохранение данных из переменных в текстовый файл
Привет всем, такая ситуация я заношу информацию в ListView в 3 колонки через переменные и мне нужно сохранить эти данные в текстовый файл. ...

JavaFx, сохранение данных в файл и загрузка данных из файла
Написал программу на JavaFx, в котором есть данные риелторов заносятся в неупорядоченный список на основе массива(фамилия, номер телефона),...

Сохранение данных в файл
Здравствуйте. На сколько мне известно, чтобы сохранить данные в файл надо использовать класс SharedPreferences. Чтобы понять как это...

Сохранение данных в файл
Добрый вечер! Есть задача: В расписании поездов указано: номер поезда, пункт отправления, пункт назначения, время отправления,...

Сохранение данных в файл
Как сохранить (а затем прочитать) в файл массив элементов класса? class SaveToFile { public: char name; String...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru