Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/58: Рейтинг темы: голосов - 58, средняя оценка - 4.69
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676

Доступ к ликвидированному объекту невозможен

09.09.2020, 15:45. Показов 15743. Ответов 108
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал новую форму Form2 и новый юзер контрол UserControl1

на новую форму повесил юзер контрол (не знаю для чего но сделал )

далее

в классе Program.cs написал вот что

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace TestUserForm
{
    public class RoomForms
    {
        public static Form RForm;
        // Создадим конструктор, 
        public void GETRoomForms()
        {
            RForm = new Form2();
        }
    }
    
    static class Program
    {
        
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
 
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
 
            RoomForms room_forms = new RoomForms();
            room_forms.GETRoomForms();
 
            Application.Run(new Form1());
        }
    }
}
далее на основную форму Form1 положил кнопку и в собитие кнопки написал

C#
1
2
3
4
private void button1_Click(object sender, EventArgs e)
        {
            RoomForms.RForm.Show();
        }
завел программу нажмал на кнопку и все ок окно Form2 открылось и кнопка не нем

затем окно Form2 закрыл и нажал на основной форме Form1 кнопку еще раз и получил исключение (

System.ObjectDisposedException: "Доступ к ликвидированному объекту невозможен.
Имя объекта: "Form2"."


как это исправить?

Добавлено через 6 минут
это я пытаю кешировать формы

Добавлено через 1 час 0 минут
не понимаю почему вылазит данное исключение?

я следую этим примерам (понятно что это веб приложение но все же) https://docs.microsoft.com/ru-... startup-cs

я как бы инитиализирую статическое поля а затем юзаю его почему оно теряется при закрытии?

Добавлено через 7 минут
пните в меня ссылку на почитать о кешировании в вин формах пожалуйста

все что нахожу это только о ASP.NET а мне вин формы нужны (

Добавлено через 5 минут
или же мне данные самих настроек необходимо кешировать

а затем использовать их при инитиализации формы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.09.2020, 15:45
Ответы с готовыми решениями:

Доступ к ликвидированному объекту невозможен
Есть некий код, работает без проблем, но при добавлении в него участка private void Timer_Tick(object sender, EventArgs e) { ...

Доступ к ликвидированному объекту невозможен
Выкидывает ошибку,в чем может быть проблема и как ее решить? Скрины и сама прога прилагаются.

RerortViewer: Доступ к ликвидированному объекту невозможен
Добрый день! Пытаюсь отобразить в репорте результат поиска в БД по дате, первый запрос работает нормально, т.е. я выбираю дату, нажимаю...

108
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
16.09.2020, 20:25
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Sanya2019 Посмотреть сообщение
мне не понятен механизм взаимодействия например датагрида с источником данных
Такой же как у всех производных от ItemsControl.

Цитата Сообщение от Sanya2019 Посмотреть сообщение
статей куча как вывести / добавить / редактировать данные а вот как производить поиск / как после редактирования или создания установить курсор на этом элементе этого я не нашел
Потому, что этого делать не стоит.
Всё это делается по источнику данных, а не по UI элементу которым является DataGrid.
0
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676
16.09.2020, 20:29  [ТС]
я просто пытаюсь понять как взаимодействовать с элементами форм
так как без этого мне никогда не понять ка писать приложения

на уровне программирования скажем PHP приложение будет тупить жутко

))) тогда когда сайт летает (
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
16.09.2020, 20:31
Цитата Сообщение от Sanya2019 Посмотреть сообщение
особенно не понятно как производить поиск
(запросы в бд мне понятны мне сам биндинг не понятен на впф
Во как я проектировал работу с данными Пример создания приложения "Работа с комнатами в студенческих общежитиях" [WPF, SQLite, Элд Хасп]

Привязки в View создаются к Контексту Данных, в котором обычно находится ViewModel.
А Данные находятся в Model и к ним никаких привязок не создаётся.

Вы говорили, что хорошо освоили ООП.
Так вот Данные это один уровень абстракции, их отражение на удобные для привязок типы - другой уровень абстракции, а Представление последних типов - ещё один, самы верхний уровень абстракции.
0
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676
16.09.2020, 20:31  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Потому, что этого делать не стоит.
Всё это делается по источнику данных, а не по UI элементу которым является DataGrid.

опять не туда )))

ща ся отдаю источнику данных напрмиер текст для поиска

после он его съедает и делат запрос затем возвращает результат в виде DataTable

я просто пытаюсь понять мое ядро верно работает или мне что то нужно переделать
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
16.09.2020, 20:32
Цитата Сообщение от Sanya2019 Посмотреть сообщение
я просто пытаюсь понять как взаимодействовать с элементами форм
так как без этого мне никогда не понять ка писать приложения
MVC/MVP паттерны знаете, можете реализовывать?
MVVM - очень близкий к ним.
Главное сделать нормальную Модель - остальное будет много легче.
0
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676
16.09.2020, 20:37  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы говорили, что хорошо освоили ООП.

и это я понимаю (((

дапустим у меня есть класс

DB

в нем методы работы с базой данных

возьмем мою CMS в ней есть класс БД который занимается следующим

ему отдают запрос типа

получитьСписокТоваров(Array(Фильтр))

затем он разбирает массив фильтра и возвращает рельтат опять же массивом данных


аналогично я делал ОРМ в шарпе только в место массива я возвращаю DataTable


но одним местоя я чувствую то это не верно

Добавлено через 2 минуты
Цитата Сообщение от Sanya2019 Посмотреть сообщение
но одним местоя я чувствую то это не верно
работает оно довольно быстро но я бось что у меня будут проблемы с привязкой данных ( вот и ихочу увидть примерный проект где реализован что то похожее на то что я описвал

что бы я мог видеть как это сделано и тогда я пойму как мне переделать ядро

а дальше уже станет понятно как сделать все остальное )

Добавлено через 42 секунды
Цитата Сообщение от Sanya2019 Посмотреть сообщение
что бы я мог видеть как это сделано
вернее как это правильно сделано )
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
16.09.2020, 20:46
Цитата Сообщение от Sanya2019 Посмотреть сообщение
ща ся отдаю источнику данных напрмиер текст для поиска
после он его съедает и делат запрос затем возвращает результат в виде DataTable
я просто пытаюсь понять мое ядро верно работает или мне что то нужно переделать
Если вы работаете с EF, о откуда DataTable?
Вы должны получать коллекции элементов с заранее определёнными свойствами.

ViewModel вызывает метод Модели (допустим, поиска) и передаёт ему нужные параметры (допустим, текст который надо найти).
Модель реализует необходимую логику и если требуется, то обращается к Репозиторию с запросом на получение нужных данных.
Репозиторий обрабатывает запрос, получает данные (безразлично откуда: файл, БД, WEB, служба и т.д.).
Полученные данные переводит в удобный для обмена вид (обычно иммутабельные DTO типы) и сообщает Модели что данные готовы.
Модель производит логическую обработку данных и сообщает об изменившемся своё состоянии.
ViewModel преобразует данные из DTO типов в удобный для WPF вид.
View по ним обновляет представление.

Добавлено через 5 минут
Sanya2019, у вас примерно реализовано в нужную сторону.
Но отличительных деталей будет множество.
И их накопится столько, что возможно будет проще переделать с нуля.

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

Посмотрите тему Пытаюсь понять идеологию MVVM

NТам я так же подробно ТС объясняю что да как.
0
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676
16.09.2020, 20:47  [ТС]
EF использую только для простоты запросов затем результат заливается в DataTable
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
16.09.2020, 20:49
Цитата Сообщение от Sanya2019 Посмотреть сообщение
вот и ихочу увидть примерный проект где реализован что то похожее на то что я описвал
Разбираться в чужом готовом проекте, при таком высоком уровне абстракций...
Ой, как я сомневаюсь в полезности для начинающего в таком занятии.

Лучше совместно сделаем реализацию небольшой задачи.

Добавлено через 1 минуту
Цитата Сообщение от Sanya2019 Посмотреть сообщение
EF использую только для простоты запросов затем результат заливается в DataTable
Сомнительное решени.
Но настаивать не буду.
Надо слишком глубоко влазить в детали реализации для оценки оптимальности подхода.
0
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676
17.09.2020, 11:29  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сомнительное решени.
Но настаивать не буду.
Надо слишком глубоко влазить в детали реализации для оценки оптимальности подхода.

ядро возвращает именно это для того что бы из любого места я мог получить эти данные

например в 1С так

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
СпрТовар = Справочники.Номенклатура;
 
//здесь я создаю как бы экземпляр класаа
Выборка = Номенклатура.Выбрать(,,Отбор, "Наименование Убыв");
//Здесь поднимаю функцию для выборки (Выборка = Дататабле) (согласно фильтрам)
Пока Выборка.Следующий() Цикл //(Обхожу коллекцию )
    Объект = Выборка.ПолучитьОбъект();//Передаю как бы идентификатор элемента в текущей интерации в новый метод который позволяет захватить элемент для записи данных
    Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
    Попытка//Исключения
        Объект.Записать();//Записываю измененные данные
    Исключение
        Предупреждение("Не удалось записать объект """ + Объект + """
                       |" + ОписаниеОшибки(),60);
    КонецПопытки;
КонецЦикла;
в общем все так же и в моем ядре

за исключением если я поднимаю форму то он передает дататабле в датагрид
а если мне нужно в коде что то получить он мне так же возвращает дататабле
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
17.09.2020, 14:38
Цитата Сообщение от Sanya2019 Посмотреть сообщение
например в 1С так
Для C# и тем более деля WPF лучше, удобнее работать с коллекцией элементов.
И реализовывать доступ через интерфейсы.

То есть будет много проще если будет нечто подобное:
C#
1
2
3
4
public interface INomenclature
{
     // Члены (свойства, методы) Номенклатуры
}
C#
1
2
3
4
public class Nomenclature : INomenclature 
{
     // Реализация интерфейса
}
C#
1
2
// Получение результата запроса в Модели
IEnumerable<INomenclature> Nomenclatures = directoriesRepos.GetNomenclatures(,,Отбор, "Наименование Убыв");
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
// Метод в Репозитории Directories
ReadOnlyCollection<INomenclature> .GetNomenclatures(string param1, string param2, string param3, string param4)
{
     var list = new  List<INomenclature>();
 
СпрТовар = Справочники.Номенклатура;
 
//здесь я создаю как бы экземпляр класcа
 
Выборка = Номенклатура.Выбрать(param1, param2, param3, param4);  !!!
 
//Здесь поднимаю функцию для выборки (Выборка = Дататабле) (согласно фильтрам)
Пока Выборка.Следующий() Цикл //(Обхожу коллекцию )
    Объект = Выборка.ПолучитьОбъект();//Передаю как бы идентификатор элемента в текущей интерации в новый метод который позволяет захватить элемент для записи данных
    Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
    Попытка//Исключения
        Объект.Записать();//Записываю измененные данные
 
         Llist.Add(new Nomenclature (параметры конструктора));  !!!
 
    Исключение
        Предупреждение("Не удалось записать объект """ + Объект + """
                       |" + ОписаниеОшибки(),60);
    КонецПопытки;
КонецЦикла;
     
return list.AsReadOnly();
}
0
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676
17.09.2020, 14:49  [ТС]
а что если коллекция заранее не известна? )

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
То есть будет много проще если будет нечто подобное:
у меня практически так и реализовано но есть нюансы
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
17.09.2020, 14:53
Цитата Сообщение от Sanya2019 Посмотреть сообщение
а что если коллекция заранее не известна? )
Я поэтому и писал, что это общие рекомендации и типовая реализация.
Конечно в конкретной задаче могут условия требующие другой реализации.

Для выводов надо лучше знать задачу.

Добавлено через 16 секунд
Цитата Сообщение от Sanya2019 Посмотреть сообщение
у меня практически так и реализовано но есть нюансы
Какие?
0
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676
17.09.2020, 15:09  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Какие?
коллекция не известна заранее так как это ядро интерпритатор языка

в нем реализованы методы скажем так работы с БД но на уровне получить все из БД (по отбору конечно)

и отдать либо массив либо DataTable

для веб сервера для работы ядра как CGI используются возврат массива

для винды DataTable

Добавлено через 11 минут
для меня просто очень удобно работать с ручкоязычным синтаксисом
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
17.09.2020, 15:44
Цитата Сообщение от Sanya2019 Посмотреть сообщение
для меня просто очень удобно работать с русскоязычным синтаксисом
Считается очень плохим тоном в программировании.

Цитата Сообщение от Sanya2019 Посмотреть сообщение
коллекция не известна заранее так как это ядро интерпритатор языка
Она неизвестна для запроса Репозитория.
НО нам же известна она для GUI и, соответственно, мы знаем какую надо запросить инфу от Модели.
А Модель уже запрашивает от Реп, который уже будет переводить неизвестную коллекцию в известную.
0
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676
18.09.2020, 12:16  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Считается очень плохим тоном в программировании.
почему?

1С синтакксис является не типизированным языков

не нужно явно указывать тип объекта

просто пишешь и все

к таму же я всю жизнь занимаюсь 1С и я очень привык к ее синтаксису

но хочу сделать хоть и маленькое но свое что бы продавать программку свою

щас у меня есть готовое решение которое я уже поставил нескольким своим клиентам но оно полностью написано на C# и без моего интерпритатора

но опять е мне было бы удобно писать на своем интерпритаторе

вот и сделал его + вот хочу сделать под него формы

но и этот вопрос уже потихонечку начинаю осваивать

щас придумал как сделать пока простой вывод что то типа

упровлемых форм но не знаю как такая реализация скажется на быстродействии

смысл таков что я в движок засунул кучу юзер контролов

типа

ТаблицаФормы()

ДиалогВыбораФайла()

и т д...

это простые контролы которые включают в себя методы работы с базой данных

короче получается нечто следующее

синтаксис вот такой

1C
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
Функция ПолучитьТаблицуЗначений()
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Код");
    ТЗ.Колонки.Добавить("Наименование");
    ТЗ.Колонки.Добавить("Дата");
    
    СтрокаТЗ = ТЗ.Добавить();
    СтрокаТЗ.Код = 1;
    СтрокаТЗ.Наименование = "Костя";
    СтрокаТЗ.ДатаРождения = Дата(2001,3,1);
    
    СтрокаТЗ = ТЗ.Добавить();
    СтрокаТЗ.Код = 2;
    СтрокаТЗ.Наименование = "Маша";
    СтрокаТЗ.ДатаРождения = Дата(2015,7,4);
    
    СтрокаТЗ = ТЗ.Добавить();
    СтрокаТЗ.Код = 3;
    СтрокаТЗ.Наименование = "Гоша";
    
    Возврат ТЗ;    
КонецФункции // ПолучитьТаблицуЗначений()
 
 
Провайдер_ = Новый Провайдер("ТаблицаЗначений");
Провайдер_ .Источник = ПолучитьТаблицуЗначений();
 
ПолеФормы = Форма.Элементы.Добавить("ТаблицаФормы_", "ТаблицаФормы", Неопределено);
ПолеФормы .ПутьКДанным = Провайдер_ ;
ПолеФормы .Заголовок = "Моя форма";
ПолеФормы .ПоложениеЗаголовка = УправляемыйИнтерфейс.ПоложениеЗаголовка.Верх;
Добавлено через 1 минуту
в итоге на формы будет повешена таблица с датагридом и в ней данные

во всех таблицая я реализовал виртуальный режим

70 000 записей из бд открывает при такой работа за чуть более 2 секунд

Добавлено через 2 минуты
Такая же реализация например для дерева форм

1C
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
Функция ПолучитьТЗ()
 
    Дерево = Новый ДеревоЗначений();
 
    Дерево = Новый ДеревоЗначений();
    Дерево.Колонки.Добавить("Год");
    Дерево.Колонки.Добавить("Месяц");
    Дерево.Колонки.Добавить("День");
    
    СтрокаДереваГод = Дерево.Строки.Добавить();
    СтрокаДереваГод.Год = 2016;
 
    СтрокаДереваМесяц = СтрокаДереваГод.Строки.Добавить();
    СтрокаДереваМесяц.Месяц = "Jan";
    СтрокаДереваМесяц.Год = СтрокаДереваГод.Год;
 
    СтрокаДереваМесяц = СтрокаДереваГод.Строки.Добавить();
    СтрокаДереваМесяц.Месяц = "Dec";
    СтрокаДереваМесяц.Год = СтрокаДереваГод.Год;
 
    СтрокаДереваГод = Дерево.Строки.Добавить();
    СтрокаДереваГод.Год = 2017;
 
    СтрокаДереваМесяц = СтрокаДереваГод.Строки.Добавить();
    СтрокаДереваМесяц.Месяц = "Feb";
    СтрокаДереваМесяц.Год = СтрокаДереваГод.Год;
 
    СтрокаДереваМесяц = СтрокаДереваГод.Строки.Добавить();
    СтрокаДереваМесяц.Месяц = "Mar";
    СтрокаДереваМесяц.Год = СтрокаДереваГод.Год;
 
    СтрокаДереваДень = СтрокаДереваМесяц.Строки.Добавить();
    СтрокаДереваДень.День = "1";
    СтрокаДереваДень.Месяц = "Mar";
    СтрокаДереваДень.Год = СтрокаДереваГод.Год;
 
 
    Возврат Дерево;
 
КонецФункции
 
Провайдер_ = Новый Провайдер("ТаблицаЗначений");;
Провайдер_ .ИсточникДерево = Данные;
 
Поле_= Форма.Элементы.Добавить("ДеревоФормы_", "ДеревоФормы", Неопределено);
Поле_.ПутьКДанным = Провайдер_ ;
Поле_.Заголовок = "Дерево значений";
Поле_.ПоложениеЗаголовка = УправляемыйИнтерфейс.ПоложениеЗаголовка.Верх;
Поле_.ТекущаяСтрока = 1;
Добавлено через 1 минуту
щас буду тестить если все ок буду думать как сделать это все с конфигуратора для форм

Добавлено через 3 минуты
в 1с то же самое

там есть одна форма главная и на нее вешаются контролы

только не при открытии формы а при старте программы создается куча экземпляров

но смысл таком

в ядре есть контролы кнопки, таблицы, и т д.

во всех таблицах неку предстовляения о том что в них будет выведено

при старте программа получает текущую модель того или инного справочника (Ее колонки настройки каждой колонки )
где каждая из колонок будет распалагаться

где будет распалагаться сама таблица

к каким краям у таблицы привяка и т д..

в итоге рисуется форма с таблице

и далее на таблицу вешается класс с метадами вывода в нее данных из бд

и т. д.

Добавлено через 29 секунд
Цитата Сообщение от Sanya2019 Посмотреть сообщение
в 1с то же самое
это я так себе предстовляю работу 1С )))

а точно не знаю ка кона работает! )

Добавлено через 10 минут
Вот так можно работать с базой данных

из моего движка

1C
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
//Выполним соединение с БД
Соединение  =  Новый Соединение () ; 
//Соединение.ТипыСУБД
//sqlite 
//mysql
//postgresql
//mssql
//dbf
//принимает параметры
//Соединение.ИмяБазы
//Соединение.Логин
//Соединение.Пароль
//Соединение.Путь (IP или каталог)
//Соединение.Прокси
//если параметры не указаны тогда считается что база данных SQLITE
//если Соединение.Путь  не указан считается что база лежит в каталоге программы
 
Соединение.ТипСУБД = Соединение.ТипыСУБД.sqlite ; 
Соединение.ИмяБазы =  ": memory:" ; 
Соединение.Открыть () ;
 
Запрос  =  Новый Запрос () ; 
Запрос.УстановитьСоединение (Соединение) ; 
Запрос.Текст =  "Создать таблицу пользователей (целое число идентификатор, текст имени)" ; 
Запрос.ВыполнитьКоманду () ;
 
Запрос.Текст =  "вставить в значения пользователей (идентификатор, имя) (1, @имя)" ; 
Запрос.УстановитьПараметр ( "имя" ,  "Сергей" ) ; 
Запрос.ВыполнитьКоманду () ;
 
Запрос2  =  Новый Запрос () ; 
Запрос2.УстановитьСоединение (Соединение) ; 
Запрос2.Текст =  " Выбрать  *  Таблица пользователи где идентификатор = @идентификатор" ; 
Запрос2.УстановитьПараметр ( "идентификатор" ,  1 ) ; 
ТЗ  = Запрос2.Выполнить (). Выгрузить () ;
 
Для каждого Стр Из ТЗ Цикл 
    Сообщить ( "Имя:"  + Стр.имя+  "("  + Стр.идентификатор+  ")" )
 КонецЦикла ;
Добавлено через 33 секунды
Вот так можно работать с базой данных

из моего движка

1C
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
//Выполним соединение с БД
Соединение  =  Новый Соединение () ; 
//Соединение.ТипыСУБД
//sqlite 
//mysql
//postgresql
//mssql
//dbf
//принимает параметры
//Соединение.ИмяБазы
//Соединение.Логин
//Соединение.Пароль
//Соединение.Путь (IP или каталог)
//Соединение.Прокси
//если параметры не указаны тогда считается что база данных SQLITE
//если Соединение.Путь  не указан считается что база лежит в каталоге программы
 
Соединение.ТипСУБД = Соединение.ТипыСУБД.sqlite ; 
Соединение.ИмяБазы =  ": memory:" ; 
Соединение.Открыть () ;
 
Запрос  =  Новый Запрос () ; 
Запрос.УстановитьСоединение (Соединение) ; 
Запрос.Текст =  "Создать таблицу пользователей (целое число идентификатор, текст имени)" ; 
Запрос.ВыполнитьКоманду () ;
 
Запрос.Текст =  "вставить в значения пользователей (идентификатор, имя) (1, @имя)" ; 
Запрос.УстановитьПараметр ( "имя" ,  "Сергей" ) ; 
Запрос.ВыполнитьКоманду () ;
 
Запрос2  =  Новый Запрос () ; 
Запрос2.УстановитьСоединение (Соединение) ; 
Запрос2.Текст =  " Выбрать  *  Таблица пользователи где идентификатор = @идентификатор" ; 
Запрос2.УстановитьПараметр ( "идентификатор" ,  1 ) ; 
ТЗ  = Запрос2.Выполнить (). Выгрузить () ;
 
Для каждого Стр Из ТЗ Цикл 
    Сообщить ( "Имя:"  + Стр.имя+  "("  + Стр.идентификатор+  ")" )
 КонецЦикла ;
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
18.09.2020, 12:49
Цитата Сообщение от Sanya2019 Посмотреть сообщение
1С синтакксис является не типизированным языков
не нужно явно указывать тип объекта
1C очень старый пакет, который вынужден соблюдать совместимость с первыми версиями.
Которые писались чуть ли не на Бейсике, наверное.

C# - строго типизированный язык.
Вы, конечно, можете использовать тип dynamic.
Но по факту его бездумное использовании, приведёт к огромному количеству багов и ошибок проявляющихся только во время исполнения.

Добавлено через 3 минуты
Цитата Сообщение от Sanya2019 Посмотреть сообщение
к таму же я всю жизнь занимаюсь 1С и я очень привык к ее синтаксису
но хочу сделать хоть и маленькое но свое что бы продавать программку свою
Придётся отвыкать, если вы хотите сделать качественное ПО.
Для пользователя можете оставить любой язык интерфейса, в том числе программного, на само ПО должно соблюдать множество правил и рекомендаций.
В том числе Правила именования - Имена должны быть на английском и передавать смысл функции, назначения именуемого объекта.
0
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676
18.09.2020, 13:18  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
C# - строго типизированный язык.
Вы, конечно, можете использовать тип dynamic.
Но по факту его бездумное использовании, приведёт к огромному количеству багов и ошибок проявляющихся только во время исполнения.
так нетипизированный мой синтаксис при компиляции добавляет необходимые типы а если это не возможно то еще до компиляции синтаксис контроль укажет где ошибка и что во что не может преобразовать

напрмиер не может приобразовать переменную в тип дата так как указано неверное содержимое и т д

то же и с числом если напрмиер попытаться передать
а = "Привет мир" ;
а * 8 = ??

он вернет сообщение что невозможно предобразовать к числу переменную а где то так

Добавлено через 37 секунд
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Придётся отвыкать, если вы хотите сделать качественное ПО.
Для пользователя можете оставить любой язык интерфейса, в том числе программного, на само ПО должно соблюдать множество правил и рекомендаций.
В том числе Правила именования - Имена должны быть на английском и передавать смысл функции, назначения именуемого объекта.
это то понятно

я о том что я для себя можно сказать делаю ИДЕ что бы сомому писать и быстро исправлять приложения

Добавлено через 23 минуты
Вот пример того как работает мой движок

https://vk.com/apdate?z=video6... l_69427573

переменной не задается тип он определяется всегда при компиляции а компиляции производится на лету
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
18.09.2020, 13:22
Цитата Сообщение от Sanya2019 Посмотреть сообщение
Вот пример того как работает мой движок
А на WPF (в GUI) что вы хотите сделать?
0
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676
18.09.2020, 14:26  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А на WPF (в GUI) что вы хотите сделать?
мне нужно сделать конфигуратор

в котором я бы мог выбирать к примеру создать новый справочник (это ка кбы новая таблица в БД + новая форма с кучей контролок

контролы накидываются на форму затем каждому контролу присваивается событие

Справочник должен иметь в себе три класса методов

один общедоступный

второй класс формы третий дополнительный класс для общих классов класса формы

при компилиции програмыы я должен получить уже готовую форму для работы с данными

Добавлено через 1 минуту
вот щас елаю то как я это понимаю но боюсь что будут тормоза жуткие

смысл в том что каждая кнопка например в форме имеет стондартное событие которое тупо запускает функцию в моем движке и передает в нее имя метода который нужно выполнить и все

Добавлено через 2 минуты
то что на видео это один модуль (Класс)

кнопка выполнить просто передает либо все тело кода в интерпритатор (если точка входа прописана в низу или точки входа)

либо передает и тело модуля и точку входа (тот самы метод который нужно выполнить)

компилятор преобразует код в C# код и выполняет его

где то так
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.09.2020, 14:26

System.ObjectDisposedException: "Доступ к ликвидированному объекту невозможен"
У меня две формы (первая форма это основная, а вторая форма как вспомогательная), которые одновременно загружается. Если же пользователь...

Из-за чего в первой строке пишет ошибку "Доступ к ликвидированному объекту невозможен"?
int d = DateTime.Now.Day; int my = DateTime.Now.Month; if (richTextBox1.TextLength &gt; 0 &amp;...

"Доступ к ликвидированному объекту невозможен" - почему?
Здравствуйте! У меня есть 2 формы. Первая форма запускает вторую форму вот таким вот образом: Form2 f2 = new Form2(); ...

Повторное открытие формы выдает ошибку доступа к ликвидированному объекту
Добрый вечер всем! Раньше я работал в C++ Builder и использовал метод Close() для своих форм. Затем их можно было всегда опять показать...

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


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru