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

Как обнулить значения TextBox в команде после сохранения их в БД

21.03.2023, 15:34. Показов 7397. Ответов 134

Студворк — интернет-сервис помощи студентам
В TextBox я записываю данные которые потом сохраняются в бд, а как обновлять потом ТекстБоксы после добавления в команде, чтобы они обнулялись для добавления новых данных, чтобы пользователю не приходилось их стирать?

RelayCommand

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
using System;
using System.Windows.Input;
 
namespace WarhammerAGM
{
    /*Этот класс реализует интерфейс ICommand, благодаря чему с помощью подобных команды мы сможем направлять вызовы к ViewModel. 
     * Ключевым здесь является метод Execute(), который получает параметр и выполняет действие, переданное через конструктор команды.*/
    public class RelayCommand : ICommand
    {
        Action<object?> execute;
        Func<object?, bool>? canExecute;
 
        public event EventHandler? CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }
 
        public RelayCommand(Action<object?> execute, Func<object?, bool>? canExecute = null)
        {
            this.execute = execute;
            this.canExecute = canExecute;
        }
 
        public bool CanExecute(object? parameter)
        {
            return canExecute == null || canExecute(parameter);
        }
 
        public void Execute(object? parameter)
        {
            execute(parameter);
        }
    }
}
ApplicationViewModel

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
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Query.Internal;
using System.Collections.ObjectModel;
using System.Windows.Controls;
using WarhammerAGM.Models;
using Xceed.Wpf.Toolkit;
 
namespace WarhammerAGM
{
    public class ApplicationViewModel
    {
        ApplicationContext db = new ApplicationContext();
        RelayCommand? addCommand;
        RelayCommand? editCommand;
        RelayCommand? deleteCommand;
        public BestiaryCreature BestiaryCreature { get; private set; } = new();
        public ObservableCollection<BestiaryCreature> BestiaryCreatures { get; set; }
        public ApplicationViewModel()
        {
            /*В конструкторе класса загружаем данные из бд в локальный кэш*/
            db.Database.EnsureCreated();
            db.BestiaryCreatures.Load();
            BestiaryCreatures = db.BestiaryCreatures.Local.ToObservableCollection();
        }
 
        // команда добавления
        public RelayCommand AddCommand
        {
            get
            {
                return addCommand ??
                  (addCommand = new RelayCommand((o) =>
                  {
                      BestiaryCreature bestiaryCreature = BestiaryCreature;
                      db.BestiaryCreatures.Add(bestiaryCreature);
                      db.SaveChanges();    
                      MessageBox.Show("Добавление прошло успешно");
                      
                  }));
            }
        }
    }
}
MainWindow.xaml
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
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
    xmlns:AttachedBehaviors="clr-namespace:WarhammerAGM.AttachedBehaviors" xmlns:local="clr-namespace:WarhammerAGM"
    x:Class="WarhammerAGM.MainWindow"
    mc:Ignorable="d"
        Title="MainWindow" Height="540" Width="960">
    <Window.DataContext>
        <local:ApplicationViewModel/>
    </Window.DataContext>
 
 
 
    <Grid>
        <TabControl FontSize="36">
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5">
                    <TabControl FontSize="22">
                        <TabItem Header="Бестиарий">
                            <Grid Background="#FFE5E5E5">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <ListView x:Name="ListViewBestiaryAddEditChange" Grid.Column="0" ItemsSource="{Binding BestiaryCreatures}">
                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <StackPanel>
                                                <TextBlock Text="{Binding Name}" FontSize="16" />
                                            </StackPanel>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>
                                <GridSplitter Grid.Column="1" ShowsPreview="False" Width="3" HorizontalAlignment="Center" VerticalAlignment="Stretch" />
                                <Grid Grid.Column="2">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="*"/>
                                        <RowDefinition Height="Auto"/>
                                    </Grid.RowDefinitions>
                                    <ScrollViewer Grid.Row="0" Background="Gray">
                                        <Grid x:Name="GridStatsEnter" Background="Gray" DataContext="{Binding BestiaryCreature}">
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto"/>
                                            </Grid.RowDefinitions>
                                            <Grid Grid.Row="0">
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="Auto"/>
                                                    <ColumnDefinition Width="*"/>
                                                </Grid.ColumnDefinitions>
                                                <TextBlock Grid.Column="0" Text="Название:" Margin="5"/>
                                                <TextBox Text="{Binding Name}" Grid.Column="1" Margin="5"/>
                                            </Grid>
 
 
                                            <Grid Grid.Row="1" Margin="3">
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                </Grid.ColumnDefinitions>
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                </Grid.RowDefinitions>
                                                <TextBlock Grid.Column="0" Grid.Row="1" Text="ББ"/>
                                                <TextBox x:Name="BBStats" Grid.Column="0" Grid.Row="2" Text="{Binding Melee}" MaxLength="3" AttachedBehaviors:TextBoxBehavior.IsInteger="True" />
                                                <TextBlock Grid.Column="1" Grid.Row="1" Text="Б"/>
                                                <TextBox x:Name="BStats" Grid.Column="1" Grid.Row="2" Text="{Binding Ballistics}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="2" Grid.Row="1" Text="Сил"/>
                                                <TextBox x:Name="PowStats" Grid.Column="2" Grid.Row="2" Text="{Binding Power}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="3" Grid.Row="1" Text="Вын"/>
                                                <TextBox x:Name="EndurStats" Grid.Column="3" Grid.Row="2" Text="{Binding Endurance}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="4" Grid.Row="1" Text="Лов"/>
                                                <TextBox x:Name="DexStats" Grid.Column="4" Grid.Row="2" Text="{Binding Dexterity}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="5" Grid.Row="1" Text="Инт"/>
                                                <TextBox x:Name="IntStats" Grid.Column="5" Grid.Row="2" Text="{Binding Intelligence}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="6" Grid.Row="1" Text="Вос"/>
                                                <TextBox x:Name="PerStats" Grid.Column="6" Grid.Row="2" Text="{Binding Perception}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="7" Grid.Row="1" Text="СВ"/>
                                                <TextBox x:Name="WillPowStats" Grid.Column="7" Grid.Row="2" Text="{Binding Willpower}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="8" Grid.Row="1" Text="Тов"/>
                                                <TextBox x:Name="PartStats" Grid.Column="8" Grid.Row="2" Text="{Binding Partnership}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                            </Grid>
 
 
                                            <Grid Grid.Row="2">
 
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                </Grid.RowDefinitions>
 
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="Auto"/>
                                                    <ColumnDefinition Width="50"/>
                                                    <ColumnDefinition Width="Auto"/>
                                                    <ColumnDefinition Width="Auto"/>
                                                </Grid.ColumnDefinitions>
 
                                                <TextBlock Grid.Row="0" Grid.Column="0" Text="Раны:" Margin="5"/>
                                                <TextBox Text="{Binding Wounds}" Grid.Row="0" Grid.Column="1" Margin="5"/>
                                                <TextBlock Grid.Row="0" Grid.Column="2" Text="Скорость:" Margin="5"/>
                                                <xctk:MaskedTextBox Grid.Row="0" Grid.Column="3" Text="{Binding Speed}" Mask="00/00/00/00"/>
 
                                            </Grid>
 
 
                                            <Grid Grid.Row="3">
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                </Grid.RowDefinitions>
                                                <Expander Grid.Row="0" Margin="5" Header="Описание" FontSize="16" Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox FontSize="14" Text="{Binding Description}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="1" Margin="5" Header="Умения" FontSize="16" Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox Text="{Binding Skills}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="2" Margin="5" Header="Таланты" FontSize="16" Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox Text="{Binding Talents}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="3" Margin="5" Header="Броня и Оружие" FontSize="16" Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <Grid.RowDefinitions>
                                                            <RowDefinition Height="Auto"/>
                                                            <RowDefinition Height="Auto"/>
                                                            <RowDefinition Height="Auto"/>
                                                            <RowDefinition Height="Auto"/>
                                                        </Grid.RowDefinitions>
                                                        <TextBlock Grid.Row="0" Text="Броня" FontSize="14"/>
                                                        <TextBox Grid.Row="1" Text="{Binding Armor}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="50"/>
                                                        <TextBlock Grid.Row="2" Text="Оружие" FontSize="14"/>
                                                        <TextBox Grid.Row="3" Text="{Binding Weapons}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="50"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="4" Margin="5" Header="Оборудование" FontSize="16" Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox Text="{Binding Equipment}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="5" Margin="5" Header="Особенности" FontSize="16" Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox Text="{Binding Features}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="6" Margin="5" Header="Дополнительнрые особенности" FontSize="16" Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox Text="{Binding AdditionalFeatures}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                            </Grid>
                                        </Grid>
                                    </ScrollViewer>
                                    <Grid Grid.Row="1">
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="*"/>
                                                <ColumnDefinition Width="*"/>
                                                <ColumnDefinition Width="*"/>
                                            </Grid.ColumnDefinitions>
                                            <Button Grid.Column="0" Content="Добавить" Margin="1" Command="{Binding AddCommand}"/>
                                            <Button Grid.Column="1" Content="Изменить" Margin="1" Command="{Binding EditCommand}" CommandParameter="{Binding ElementName=ListViewBestiaryAddEditChange, Path=SelectedItem}"  />
                                            <Button Grid.Column="2" Content="Удалить" Margin="1" Command="{Binding DeleteCommand}" CommandParameter="{Binding ElementName=ListViewBestiaryAddEditChange, Path=SelectedItem}"  />
                                        </Grid>
                                    </Grid>
                                </Grid>
                            </Grid>
</Window>
Миниатюры
Как обнулить значения TextBox в команде после сохранения их в БД   Как обнулить значения TextBox в команде после сохранения их в БД  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2023, 15:34
Ответы с готовыми решениями:

Как после выполнения процедуры, обнулить значения Request-a?
Ситуация следующая: при передачи значений формы POST методом, по значению поля определяется процедура формирования данных в таблице....

Как обнулить значение textbox?
Вводишь год - нажимаешь кнопочку - получаешь ответ Когда хочешь ввести новое значение, ответ в текстовом боксе не убирается до нажатия...

Сохранения значения slect после обновления страницы
Доброго время суток всем! Сразу хочу сказать что в яве я особо не рулю. На каком-то форуме нашел подходящий скрипт и попробывал его...

134
1 / 1 / 0
Регистрация: 04.05.2021
Сообщений: 156
29.03.2023, 17:40  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Свойства для полей TextBox - это свойства VM и к модели они никакого отношения не должны иметь. Из этих свойств потом собирается объект для модели и сохраняется в БД.
У меня все TextBox привязаны к полям класса. Как по другому обнулять значения TextBox Если не так
C#
1
BestiaryCreature = new(); // обнуление TextBox
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
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<Grid x:Name="GridStatsEnter" Background="Gray" DataContext="{Binding BestiaryCreature}">
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto"/>
                                            </Grid.RowDefinitions>
                                            <Grid Grid.Row="0">
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="Auto"/>
                                                    <ColumnDefinition Width="*"/>
                                                </Grid.ColumnDefinitions>
                                                <TextBlock Grid.Column="0" Text="Название:" Margin="5"/>
                                                <TextBox x:Name="NameStats" Text="{Binding Name}" Grid.Column="1" Margin="5"/>
                                            </Grid>
 
                                            <Grid Grid.Row="1" Margin="3">
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="*"/>
                                                </Grid.ColumnDefinitions>
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                </Grid.RowDefinitions>
                                                <TextBlock Grid.Column="0" Grid.Row="1" Text="ББ"/>
                                                <TextBox x:Name="BBStats" Grid.Column="0" Grid.Row="2" Text="{Binding Melee}" MaxLength="3" AttachedBehaviors:TextBoxBehavior.IsInteger="True" />
                                                <TextBlock Grid.Column="1" Grid.Row="1" Text="Б"/>
                                                <TextBox x:Name="BStats" Grid.Column="1" Grid.Row="2" Text="{Binding Ballistics}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="2" Grid.Row="1" Text="Сил"/>
                                                <TextBox x:Name="PowStats" Grid.Column="2" Grid.Row="2" Text="{Binding Power}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="3" Grid.Row="1" Text="Вын"/>
                                                <TextBox x:Name="EndurStats" Grid.Column="3" Grid.Row="2" Text="{Binding Endurance}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="4" Grid.Row="1" Text="Лов"/>
                                                <TextBox x:Name="DexStats" Grid.Column="4" Grid.Row="2" Text="{Binding Dexterity}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="5" Grid.Row="1" Text="Инт"/>
                                                <TextBox x:Name="IntStats" Grid.Column="5" Grid.Row="2" Text="{Binding Intelligence}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="6" Grid.Row="1" Text="Вос"/>
                                                <TextBox x:Name="PerStats" Grid.Column="6" Grid.Row="2" Text="{Binding Perception}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="7" Grid.Row="1" Text="СВ"/>
                                                <TextBox x:Name="WillPowStats" Grid.Column="7" Grid.Row="2" Text="{Binding Willpower}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                                <TextBlock Grid.Column="8" Grid.Row="1" Text="Тов"/>
                                                <TextBox x:Name="PartStats" Grid.Column="8" Grid.Row="2" Text="{Binding Partnership}" AttachedBehaviors:TextBoxBehavior.IsInteger="True"/>
                                            </Grid>
 
 
                                            <Grid Grid.Row="2">
 
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                </Grid.RowDefinitions>
 
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="Auto"/>
                                                    <ColumnDefinition Width="50"/>
                                                    <ColumnDefinition Width="Auto"/>
                                                    <ColumnDefinition Width="Auto"/>
                                                </Grid.ColumnDefinitions>
 
                                                <TextBlock Grid.Row="0" Grid.Column="0" Text="Раны:" Margin="5"/>
                                                <TextBox Text="{Binding Wounds}" Grid.Row="0" Grid.Column="1" Margin="5"/>
                                                <TextBlock Grid.Row="0" Grid.Column="2" Text="Скорость:" Margin="5"/>
                                                <xctk:MaskedTextBox Grid.Row="0" Grid.Column="3" Text="{Binding Speed}" Mask="00/00/00/00"/>
 
                                            </Grid>
 
 
                                            <Grid Grid.Row="3">
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                </Grid.RowDefinitions>
                                                <Expander Grid.Row="0" Margin="5" Header="Описание"  Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox FontSize="14" Text="{Binding Description}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="1" Margin="5" Header="Умения"  Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox Text="{Binding Skills}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="2" Margin="5" Header="Таланты"  Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox Text="{Binding Talents}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="3" Margin="5" Header="Броня и Оружие"  Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <Grid.RowDefinitions>
                                                            <RowDefinition Height="Auto"/>
                                                            <RowDefinition Height="Auto"/>
                                                            <RowDefinition Height="Auto"/>
                                                            <RowDefinition Height="Auto"/>
                                                        </Grid.RowDefinitions>
                                                        <TextBlock Grid.Row="0" Text="Броня" FontSize="14"/>
                                                        <TextBox Grid.Row="1" Text="{Binding Armor}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="50"/>
                                                        <TextBlock Grid.Row="2" Text="Оружие" FontSize="14"/>
                                                        <TextBox Grid.Row="3" Text="{Binding Weapons}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="50"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="4" Margin="5" Header="Оборудование"  Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox Text="{Binding Equipment}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="5" Margin="5" Header="Особенности"  Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox Text="{Binding Features}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                                <Expander Grid.Row="6" Margin="5" Header="Дополнительнрые особенности"  Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                                                    <Grid>
                                                        <TextBox Text="{Binding AdditionalFeatures}" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" MinHeight="100"/>
                                                    </Grid>
                                                </Expander>
                                            </Grid>
                                        </Grid>
0
 Аватар для Andrey-MSK
3390 / 2276 / 388
Регистрация: 14.08.2018
Сообщений: 7,696
Записей в блоге: 4
29.03.2023, 17:47
Цитата Сообщение от VeronikaKlever Посмотреть сообщение
У меня все TextBox привязаны к полям класса. Как по другому обнулять значения TextBox Если не так
Можно ведь было для каждого поля сделать своё свойство, либо передавать в модель не объект VM, а новый объект модели, который создан из объекта VM, а потом, после сохранения его в БД, передать его данные назад в объект VM...
В общем вы потеряли кучу функционала по ускорению работы с БД... Ведь самое затратное - это по новой перечитать данные, когда можно просто добавить готовый объект, который уже создал EF со всеми ID, в коллекцию, VM и т.д., а БД оставить в покое.
Вот представьте, у вас в таблице 100000 записей и вы добавляете одну, и по вашему коду нужно будет опять перечитать все 100000 записей только для того, чтобы соблюсти целостность нового ID ОДНОЙ записи...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
29.03.2023, 18:09
Цитата Сообщение от VeronikaKlever Посмотреть сообщение
Как правильно оформлять проверку на уникальность элемента в бд?
Или в БД настраивается уникальность.
Или, если используется Code First, настраивается атрибутами сущности и в Контексте БД.
Настройка индексов с помощью атрибутов | METANIT
0
1 / 1 / 0
Регистрация: 04.05.2021
Сообщений: 156
29.03.2023, 18:51  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Можно ведь было для каждого поля сделать своё свойство, либо передавать в модель не объект VM, а новый объект модели, который создан из объекта VM, а потом, после сохранения его в БД, передать его данные назад в объект VM...
можете для наглядности небольшой пример привести?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
29.03.2023, 19:39
Цитата Сообщение от VeronikaKlever Посмотреть сообщение
После добавления первого элемента TextBox не обнуляются.
Только этот баг проявился:
C#
73
74
75
76
77
                //отменяем веделение элемента ListView
                if (SelectedItem is null)
                    BestiaryCreature = new();
                else
                    SelectedItem = null;
Добавлено через 14 минут
Цитата Сообщение от VeronikaKlever Посмотреть сообщение
оформлять проверку на уникальность элемента в бд?
Смотрите последнюю фиксацию.
C#
5
6
7
8
9
10
11
12
13
namespace WarhammerAGM.Models
{
    [Index(nameof(Name), IsUnique = true)]
    public partial class BestiaryCreature 
    {
        [Key]
        public int Id {get; set;}
 
        public string Name { get; set; } = string.Empty;
C#
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
        public RelayCommand AddCommand => GetCommand(() =>
        {
 
            // Обнуляем Id и добавляем как новую
            BestiaryCreature.Id = 0;
            db.BestiaryCreatures.Add(BestiaryCreature);
            try
            {
                db.SaveChanges();
                MessageBox.Show("Добавление прошло успешно");
 
                //отменяем веделение элемента ListView
                if (SelectedItem is null)
                    BestiaryCreature = new();
                else
                    SelectedItem = null;
            }
            catch (Exception ex)
            {
                // Здесь обработка ошибок ex
                db.BestiaryCreatures.Remove(BestiaryCreature);
                MessageBox.Show("Такое название уже существует");
 
            }
        });
0
1 / 1 / 0
Регистрация: 04.05.2021
Сообщений: 156
29.03.2023, 21:53  [ТС]
Элд Хасп
Не совсем поняла зачем нужно добавление (Устранён баг с добавлением в пустую базу) в App.xaml
App.xaml.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.IO;
using System.Windows;
 
namespace WarhammerAGM
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        private void OnStartup(object sender, StartupEventArgs e)
        {
            if (MessageBox.Show("Удалить БД?", "Старт", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                File.Delete("Bestiary.db");
            }
        }
    }
}
App.xaml
XML
1
2
3
4
5
6
7
8
9
10
<Application x:Class="WarhammerAGM.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WarhammerAGM"
             StartupUri="MainWindow.xaml"
             Startup="OnStartup">
    <Application.Resources>
         
    </Application.Resources>
</Application>
Можно ли обойтись без этого окошка? Или сделать так, чтобы это происходило без участия пользователя?

Добавлено через 13 минут
Я бы не хотела чтобы у пользователя была возможность удалять бд
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
29.03.2023, 22:03
Цитата Сообщение от VeronikaKlever Посмотреть сообщение
if (MessageBox.Show("Удалить БД?", "Старт", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                File.Delete("Bestiary.db");
            }
Это для тестирования.
Чтобы не "руками" удалять для проверки пустой базы.

После отладки - удалите это.

Добавлено через 9 минут
VeronikaKlever, если интересно куда дальше развивать приложение - уберите все MessageBox из VM.
Замените на внедрённый диалог.
1
1 / 1 / 0
Регистрация: 04.05.2021
Сообщений: 156
29.03.2023, 22:40  [ТС]
Элд Хасп
Если выделить элемент и нажать кнопку добавить, то сработает catch
Если после этого нажать кнопку "Сохранить изменения", то выдаст ошибку, что он ушел за длину так как индекс будет равняться тому самому удаленному элементу
Решила это запоминанием Id в локальной переменной, чтобы потом присвоить его BestiaryCreature
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 RelayCommand AddCommand => GetCommand(() =>
        {
            var bestCrId = BestiaryCreature.Id;
            // Обнуляем Id и добавляем как новую
            BestiaryCreature.Id = 0;
            db.BestiaryCreatures.Add(BestiaryCreature);
            try
            {
                db.SaveChanges();
                MessageBox.Show("Добавление прошло успешно");
 
                //отменяем выделение элемента ListView
                if (SelectedItem is null)
                    BestiaryCreature = new();
                else
                    SelectedItem = null;
            }
            catch (Exception ex)
            {
                // Здесь обработка ошибок ex
                db.BestiaryCreatures.Remove(BestiaryCreature);
                BestiaryCreature.Id = bestCrId;
                MessageBox.Show("Такое название уже существует");
 
            }
        });
Миниатюры
Как обнулить значения TextBox в команде после сохранения их в БД  
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
29.03.2023, 23:23
Цитата Сообщение от VeronikaKlever Посмотреть сообщение
Если выделить элемент и нажать кнопку добавить, то сработает catch
Естественно. Вы же имя не изменили и хотите задублировать с тем же именем.

Добавлено через 18 минут
Цитата Сообщение от VeronikaKlever Посмотреть сообщение
Решила это запоминанием Id в локальной переменной,
Всё верно. После неудачного сохранения Id уже не равен исходному и его нужно восстановить.
0
 Аватар для Andrey-MSK
3390 / 2276 / 388
Регистрация: 14.08.2018
Сообщений: 7,696
Записей в блоге: 4
30.03.2023, 08:22
Цитата Сообщение от VeronikaKlever Посмотреть сообщение
можете для наглядности небольшой пример привести?
Я ведь уже показывал - Как обнулить значения TextBox в команде после сохранения их в БД
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
30.03.2023, 10:06
Цитата Сообщение от VeronikaKlever Посмотреть сообщение
можете для наглядности небольшой пример привести?
Вам не подойдёт вариант от Andrey-MSK.
Для него требуется явный переход в режим добавления как я писал здесь:
Цитата Сообщение от Элд Хасп Посмотреть сообщение
То есть кнопка "Добавить" должна вызвать окошко (Popup) с меню "Новую" или "Копию"?.
После этого в регион детализации отправляется новый или скопированный (но с нулевым Id) объект.
В него вносятся изменения.
А кнопки заменяются на "Сохранить" и "Отменить".
В команде уже происходит определение по ID какой это режим.
Если Id=0, то это добавление.
В вашем же случае он никогда не 0. И его необходимо сбрасывать "руками", если вызвана команда добавления.

Добавлено через 3 минуты
VeronikaKlever, кстати, в команде редактирования тоже может быть исключение, если будет имя как уже у другого существующего.
Поэтому там тоже нужна обёртка try-catch и откат в случае не удачи сохранения.

Добавлено через 2 минуты
В удалении.... в данном случае реализации, вроде, нет причин для исключений.
Но в общем случае тоже может быть.
Вообще, лучше всегда сохранение оборачивать в try-catch или обрабатывать исключения в App. Чтобы не происходило падение приложения без необъяснимых причин.
0
 Аватар для Andrey-MSK
3390 / 2276 / 388
Регистрация: 14.08.2018
Сообщений: 7,696
Записей в блоге: 4
30.03.2023, 10:45
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для него требуется явный переход в режим добавления
У меня команда сама проверяет что надо сделать - обновить или добавить.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
30.03.2023, 17:37
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
что надо сделать - обновить или добавить.
По Id сущности же определяет.
Если есть такой Id, то обновление. Нет - добавление.
Это, в принципе, и проверять не нужно. Update и так это делает автоматически, насколько знаю.

Суть в том, что в сущности нужно ДО ВЫЗОВА метода сбросить Id.
А у ТС он всегда равен Id выбранной сущности.
Поэтому ваш метод будет всегда обновлять. а не добавлять.
0
1 / 1 / 0
Регистрация: 04.05.2021
Сообщений: 156
30.03.2023, 20:52  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
кстати, в команде редактирования тоже может быть исключение, если будет имя как уже у другого существующего.
Обработала исключение через try catch вот так
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
public RelayCommand EditCommand => GetCommand(
        () =>
        {
            var bestCrOld = SelectedItem;
            try
            {
                // Запоминаем в локальной переменной
                var bestCr = BestiaryCreature;
 
                // Заменяем сущности
                int index = BestiaryCreatures.TakeWhile(bc => bc.Id != bestCr.Id).Count();
                BestiaryCreatures.RemoveAt(index);
                BestiaryCreatures.Insert(index, bestCr);
 
                // Сохраняем изменения
                db.SaveChanges();
 
                //отменяем выделение элемента ListView
                SelectedItem = null;
            }
            catch (Exception ex)
            {
                int index = BestiaryCreatures.TakeWhile(bc => bc.Id != bestCrOld.Id).Count();
                BestiaryCreatures.RemoveAt(index);
                BestiaryCreatures.Insert(index, bestCrOld);
                MessageBox.Show("Такое название уже существует");
            }
        },
        () => SelectedItem is BestiaryCreature);
Как обрабатывать через App? Я так понимаю через DispatcherUnhandledException
в App если писать
C#
1
2
3
4
5
private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
        {
            MessageBox.Show("An unhandled exception just occurred: " + e.Exception.Message, "Exception Sample", MessageBoxButton.OK, MessageBoxImage.Error);
            e.Handled = true;
        }
Так он не обрабатывает ошибку сохранения в бд
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
30.03.2023, 21:52
Цитата Сообщение от VeronikaKlever Посмотреть сообщение
Так он не обрабатывает ошибку сохранения в бд
Так вы же их уже обработали.
Нужно убирать обработку в командах:
C#
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
        public RelayCommand AddCommand => GetCommand(() =>
        {
            var bestCrId = BestiaryCreature.Id;
            // Обнуляем Id и добавляем как новую
            BestiaryCreature.Id = 0;
            db.BestiaryCreatures.Add(BestiaryCreature);
            //try
            {
                db.SaveChanges();
                MessageBox.Show("Добавление прошло успешно");
 
                //отменяем выделение элемента ListView
                if (SelectedItem is null)
                    BestiaryCreature = new();
                else
                    SelectedItem = null;
            }
            //catch (Exception ex)
            //{
            //    // Здесь обработка ошибок ex
            //    db.BestiaryCreatures.Remove(BestiaryCreature);
            //    BestiaryCreature.Id = bestCrId;
            //    MessageBox.Show("Такое название уже существует");
 
            //}
        });
Или после обработки выкидывать это же исключение (или новое с информацией о том, нужно его доп. обработать или нет):
C#
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
        public RelayCommand AddCommand => GetCommand(() =>
        {
            var bestCrId = BestiaryCreature.Id;
            // Обнуляем Id и добавляем как новую
            BestiaryCreature.Id = 0;
            db.BestiaryCreatures.Add(BestiaryCreature);
            try
            {
                db.SaveChanges();
                MessageBox.Show("Добавление прошло успешно");
 
                //отменяем выделение элемента ListView
                if (SelectedItem is null)
                    BestiaryCreature = new();
                else
                    SelectedItem = null;
            }
            catch (Exception ex)
            {
                // Здесь обработка ошибок ex
                db.BestiaryCreatures.Remove(BestiaryCreature);
                BestiaryCreature.Id = bestCrId;
                //MessageBox.Show("Такое название уже существует");
 
                throw ex;
            }
        });
0
 Аватар для Andrey-MSK
3390 / 2276 / 388
Регистрация: 14.08.2018
Сообщений: 7,696
Записей в блоге: 4
31.03.2023, 08:22
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А у ТС он всегда равен Id выбранной сущности.
Значит нужно сделать по правильному, разделить объекты VM и сущности репозитория. Тогда и путаницы не будет...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
31.03.2023, 10:03
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
нужно сделать по правильному, разделить объекты VM и сущности репозитория
При чём здесь Id? Это никак не решает разделение режимов редактирования и добавления.
Вы сами посмотрите по своему коду где вы используете этот метод - у вас эти режимы разделены в GUI.
И это правильно. Это типично, интуитивно понятно и лучше сделать так.
Я об этом уже писал выше, но ТС оставил по своему.
Не хочет выделять отдельно режим добавления.

Добавлено через 2 минуты
Поэтому, приходится создавать разные команды:
- сохранение изменений текущего выбранного BestiaryCreature (Update);
- создание нового BestiaryCreature по изменённым данным текущего выбранного (Clone + Add).

Добавлено через 4 минуты
В логике создаётся лишний клон выбранного элемента, но я не нашёл как можно обновлять свойства сущности, которая не отслеживается в Контексте БД.
Можно "руками" копировать каждое свойство, но как-то мне это, в данном случае, совсем не нравится.
Возможно в EF есть способ это делать и я просто о нём не знаю.
0
 Аватар для Andrey-MSK
3390 / 2276 / 388
Регистрация: 14.08.2018
Сообщений: 7,696
Записей в блоге: 4
31.03.2023, 10:10
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В логике создаётся лишний клон выбранного элемента, но я не нашёл как можно обновлять свойства сущности, которая не отслеживается в Контексте БД.
Потому я и говорю что объект VM для отображения/изменения и объект репозитория - должны быть разными. В VM перед сохранением должен создаваться объект репозитория из данных VM и только потом передаваться в методы работы с БД. Это будут абсолютно разные вещи и одно на другое никак не будет влиять. Объект в контексте останется отслеживаемым и с адекватными данными, а объект VM сбросится и будет готов для редактирования.
Я сам так накололся пару раз, когда только начинал...
Тоже сидел городил фиг пойми чего... Пришлось всё потом переделывать, хорошо пара окон всего было.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
31.03.2023, 10:22
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Потому я и говорю что объект VM для отображения/изменения и объект репозитория - должны быть разными.
Что никак не снимает вопрос по копированию значений сущности.
Это нужно делать либо "руками", либо каким-то маппером.
Возможно в EF есть способ обновления не отслеживаемой (No Traking) сущности. Если есть, то поможет улучшить имеющееся решение ТС. Но я такого способа не знаю.

Andrey-MSK, вы пишите за неправильную АРХИТЕКТУРУ. Я с вами согласен. Что по нормальному лучше переделать. Но в данном случае БД состоит из всего ОДНОЙ таблицы. Нет никакой БЛ. И нужно максимально упрощённое решение. А разделение слоёв, в данном случае, это точно не упрощение.

Добавлено через 1 минуту
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Потому я и говорю что объект VM для отображения/изменения и объект репозитория - должны быть разными.
Что никак не снимает вопрос по копированию значений сущности.
Это нужно делать либо "руками", либо каким-то маппером.
Возможно в EF есть способ обновления (ReLoad) не отслеживаемой (No Traking) сущности. Если есть, то поможет улучшить имеющееся решение ТС. Но я такого способа не знаю.

Andrey-MSK, вы пишите за неправильную АРХИТЕКТУРУ. Я с вами согласен. Что по нормальному лучше переделать. Но в данном случае БД состоит из всего ОДНОЙ таблицы. Нет никакой БЛ. И нужно максимально упрощённое решение. А разделение слоёв, в данном случае, это точно не упрощение.
0
 Аватар для Andrey-MSK
3390 / 2276 / 388
Регистрация: 14.08.2018
Сообщений: 7,696
Записей в блоге: 4
31.03.2023, 10:37
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но в данном случае БД состоит из всего ОДНОЙ таблицы.
Количество таблиц не влияет на правильность и логичность написания взаимодействия с данными
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2023, 10:37

Идеи для создания валидации кода в команде, сохранения стандартов
Добрый день дорогие коллеги. Появился такой вопрос решил тут спросить, очень надеюсь на ваши ответы. Есть небольшая команда разработчков...

Отобразить текст в Textbox из другого TextBox в разных кодировках без сохранения в файл
Доброго всем времени суток! Есть на форме несколько Textbox&quot;сов. В 1-й Textbox вписывается текст как образец, а в остальных этот же...

После нажатия кнопки "остановить" не получается обнулить значения
Здравстуйте! Делали курсовик с другом и столкнулись с одной проблемой, мы после нажатия кнопки &quot;остановить&quot; не можем обнулить...

Visual Studio Code Есть ли поддержка сохранения файла в 2х местах или запуска батника после сохранения
Здравствуйте. Кто знает есть ли в Visual Studio Code возможность сохранять файцл в 2х местах или запускать определенный батник после...

TextBox color - Как окрасить на форме TextBox от разного значения
Всем привет У меня вопрос по VB. На форме много TextBox и окрашивать их по индивидуальному значению получается достаточно громоздкий код....


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера 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 Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru