Как передать данные из одной программы в другую

да, обе программы мои. уже сделал через WM_COPYDATA, но мне говорят что этот способ не очень хорош, поскольку не всегда срабатывает если программа-приемник работает в фоне или не имеет формы. Вот пример:

Регистрация: 31.05.2010
Сообщений: 13,964

Через виндовые сообщения.
Придумываешь сообщение типа WM_MY_MESSAGE = WM_USER + 1;
В первой проге SendMessage/PostMessage, во второй — обработчик события сообщения.

Головка бо-бо с похмелья? Передаётся только сообщение и то в пределах выделенного окна.
Дайте, я залезу на тот дуб, с которого можно так упасть

Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Цифровой кот
Регистрация: 29.08.2014
Сообщений: 7,656

Дайте, я залезу на тот дуб, с которого можно так упасть

это мой дуб. златая цепь на дубе том.

мессадж WM_COPYDATA как раз и предназначено для передачи данных между разными приложениями.

как передать данные с одной страницы на другую без особых знаний???

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана.
Регистрация: 15.02.2010
Сообщений: 15,400

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

Форумчанин
Регистрация: 06.01.2011
Сообщений: 369

Головка бо-бо с похмелья? Передаётся только сообщение и то в пределах выделенного окна.
Дайте, я залезу на тот дуб, с которого можно так упасть

Ну вперед, на дуб

unit mainTr; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private < Private declarations >public < Public declarations >end; var Form1: TForm1; implementation const //Идентификатор сообщения WM_MY_MESSAGE = WM_USER + 1; //Имя окна-приемника RWndName = ‘Приемник’; //Нажимаем на кнопочку procedure TForm1.Button1Click(Sender: TObject); var //Идентификатор окна-приемника RWnd: HWnd; begin //Ищем окно-приемник RWnd:=FindWindow(nil, PWideChar(RWndName)); //Если нашли — отправляем сообщение if (RWnd > 0) then PostMessage(RWnd, WM_MY_MESSAGE, Application.Handle, 0); end; end.
Код программы-приемника:
unit mainRc; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; procedure FormCreate(Sender: TObject); private < Private declarations >procedure AppOnMessage(var Msg: TMsg; var Handled: boolean); public < Public declarations >end; var Form1: TForm1; implementation const WM_MY_MESSAGE = WM_USER + 1; //Обрабочик событий приложения procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: boolean); begin Handled:=False; if (Msg.Message = WM_MY_MESSAGE) then begin Panel1.Caption:=’Сообщение принято!’; Handled:=True; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage:=AppOnMessage; end; end.

З.Ы. Я НЕ говорю, что это самое правильное, изящное и надежное решение, но оно работает. ТС справшивал «вообще», и я написал по памяти то, чем сам когда-то пользовался.

Как передать данные с одной страницы на другую с помощью JS?

Программирую по необходимости
Последний раз редактировалось tsar_; 04.06.2016 в 13:42 .

Источник: www.programmersforum.ru

Обмен между приложениями

Взаимодействие между различными приложениями может осуществляться по разному, например, через сокеты. Но в .NET 4.0 была введена новая функциональность, которая представляет собой создание участка общей разделяемой памяти для приложений.

Читайте также:
Как составить рабочую программу по психологии

Основной функционал новой технологии заключается в пространстве имен System.IO.MemoryMappedFiles

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

Для этого нам потребуются два класса: MemoryMappedFile — он будет создавать участок разделяемой памяти и MemoryMappedViewAccessor — с его помощью мы будем проводить взаимодействие (чтение/запись) с общей памятью.

Код приложения, записывающего сообщение в память.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.MemoryMappedFiles; namespace WriteMemoryAp < class Program < static void Main(string[] args) < Console.WriteLine(«Введите сообщение»); //Ввод выражения для записи в общую память char[] message = Console.ReadLine().ToCharArray(); //Размер введенного сообщения int size = message.Length; //Создание участка разделяемой памяти //Первый параметр — название участка, //второй — длина участка памяти в байтах: тип char занимает 2 байта //плюс четыре байта для одного объекта типа Integer MemoryMappedFile sharedMemory = MemoryMappedFile.CreateOrOpen(«MemoryFile», size * 2 + 4); //Создаем объект для записи в разделяемый участок памяти using (MemoryMappedViewAccessor writer = sharedMemory.CreateViewAccessor(0, size * 2 + 4)) < //запись в разделяемую память //запись размера с нулевого байта в разделяемой памяти writer.Write(0, size); //запись сообщения с четвертого байта в разделяемой памяти writer.WriteArray(4, message, 0, message.Length); > Console.WriteLine(«Сообщение записано в разделяемую память»); Console.WriteLine(«Для выхода из программы нажмите любую клавишу»); Console.ReadLine(); > > >

Код приложения, считывающего сообщение из памяти.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.MemoryMappedFiles; namespace ReadMemoryAp < class Program < static void Main(string[] args) < //Массив для сообщения из общей памяти char[] message; //Размер введенного сообщения int size; //Получение существующего участка разделяемой памяти //Параметр — название участка MemoryMappedFile sharedMemory = MemoryMappedFile.OpenExisting(«MemoryFile»); //Сначала считываем размер сообщения, чтобы создать массив данного размера //Integer занимает 4 байта, начинается с первого байта, поэтому передаем цифры 0 и 4 using (MemoryMappedViewAccessor reader = sharedMemory.CreateViewAccessor(0, 4, MemoryMappedFileAccess.Read)) < size = reader.ReadInt32(0); >//Считываем сообщение, используя полученный выше размер //Сообщение — это строка или массив объектов char, каждый из которых занимает два байта //Поэтому вторым параметром передаем число символов умножив на из размер в байтах плюс //А первый параметр — смещение — 4 байта, которое занимает размер сообщения using (MemoryMappedViewAccessor reader = sharedMemory.CreateViewAccessor(4, size * 2, MemoryMappedFileAccess.Read)) < //Массив символов сообщения message = new char[size]; reader.ReadArray(0, message, 0, size); > Console.WriteLine(«Получено сообщение :»); Console.WriteLine(message); Console.WriteLine(«Для выхода из программы нажмите любую клавишу»); Console.ReadLine(); > > >

Теперь запускаем первое приложение, вводим сообщение и отправляем его в память. Затем запускаем второе приложение и видим наше сообщение из разделяемой памяти.

Источник: metanit.com

Передача данных между формами

Область применения:yesVisual StudionoVisual Studio для Mac noVisual Studio Code

Наборы данных и связанные с ними классы являются устаревшими технологиями .NET с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти, пока приложения отключены от базы данных. Они особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения в базе данных. Хотя наборы данных оказались очень успешной технологией, мы рекомендуем использовать Entity Framework Core в новых приложениях .NET. Платформа Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей и имеет более простой программный интерфейс.

Это пошаговое руководство содержит инструкции по передаче данных из одной формы в другую. Используя таблицы клиентов и заказов из Northwind, одна форма позволяет пользователям выбрать клиента, а вторая форма отображает заказы выбранного клиента. В этом пошаговом руководстве показано, как создать метод во второй форме, который получает данные из первой формы.

Читайте также:
Не могу деинсталлировать программу

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

В данном пошаговом руководстве представлены следующие задачи.

  • Создание нового проекта приложения Windows Forms.
  • Создание и настройка набора данных с помощью мастера настройки источника данных.
  • Выбор элемента управления, создаваемого на форме при перетаскивании элементов из окна Источники данных. Дополнительные сведения см. в разделе Настройка элемента управления для создания при перетаскивании из окна Источники данных.
  • Создание элемента управления с привязкой к данным с помощью перетаскивания элементов из окна Источники данных на форму.
  • Создание второй формы с сеткой для отображения данных.
  • Создание запроса адаптера таблицы для получения заказов определенного клиента.
  • Передача данных между формами.

Предварительные требования

В этом пошаговом руководстве используется SQL Server Express LocalDB и пример базы данных Northwind.

  1. Если у вас нет SQL Server Express LocalDB, установите его на странице скачивания SQL Server Express или с помощью Visual Studio Installer. В Visual Studio Installer SQL Server Express LocalDB можно установить как часть рабочей нагрузки хранение и обработка данных или как отдельный компонент.
  2. Установите пример базы данных Northwind, выполнив следующие действия.
  1. В Visual Studio откройте окно SQL Server обозреватель объектов. (SQL Server обозреватель объектов устанавливается как часть рабочей нагрузки хранения и обработки данных в Visual Studio Installer.) Разверните узел SQL Server. Щелкните правой кнопкой мыши экземпляр LocalDB и выберите Создать запрос. Откроется окно редактора запросов.
  2. Скопируйте скрипт Transact-SQL Northwind в буфер обмена. Этот скрипт T-SQL создает базу данных Northwind с нуля и заполняет ее данными.
  3. Вставьте скрипт T-SQL в редактор запросов и нажмите кнопку Выполнить . Через некоторое время запрос завершит выполнение и будет создана база данных Northwind.

Создание проекта приложения Windows Forms

  1. В Visual Studio в меню Файл выберите пункты Создать>Проект.
  2. Разверните Visual C# или Visual Basic в области слева, а затем выберите Рабочий стол Windows.
  3. В средней области выберите тип проекта Windows Forms Приложение.
  4. Присвойте проекту имя PassingDataBetweenForms и нажмите кнопку ОК. Создается проект PassingDataBetweenForms, который добавляется в Обозреватель решений.

Создание источника данных

  1. Чтобы открыть окно Источники данных , в меню Данные выберите пункт Показать источники данных.
  2. В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.
  3. На странице Выбор типа источника данных выберите элемент База данных и нажмите Далее.
  4. На странице Выбор модели базы данных выберите Набор данных и нажмите кнопку Далее.
  5. На странице Выберите подключение к данным выполните одно из следующих действий.
    • Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его.
    • Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение.
    • Если базе данных требуется пароль и выбран параметр для включения конфиденциальных данных, выберите параметр и нажмите кнопку Далее.
    • На странице Сохранение строки подключения в файл конфигурации приложения нажмите кнопку Далее.
    • Разверните узел Таблицы на странице Выбор объектов базы данных.
    • Выберите таблицы Customers и Orders и нажмите кнопку Готово. NorthwindDataSet добавляется в проект, и таблицы Customers и Orders отображаются в окне Источники данных.
    Читайте также:
    Программа для настройки ибп liebert

    Создание первой формы (Form1)

    Вы можете создать сетку с привязкой к данным (элемент управления DataGridView) с помощью перетаскивания узла Customers из окна Источники данных на форму.

    Создание сетки с привязкой к данным на форме

    • Перетащите главный узел Customers из окна Источники данных на форму Form1. На форме Form1 появляется DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator.

    Создание второй формы

    Создайте вторую форму для передачи данных.

    1. В меню Проект выберите пункт Добавить форму Windows.
    2. Оставьте имя по умолчанию Form2 и нажмите кнопку Добавить.
    3. Перетащите главный узел Orders из окна Источники данных на форму Form2. На форме Form2 появляется DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator.
    4. Удалите OrdersBindingNavigator из области компонентов. OrdersBindingNavigator исчезает из Form2.

    Добавление запроса TableAdapter

    Добавьте запрос TableAdapter в Form2, чтобы загрузить заказы для выбранного клиента на Form1.

    1. Дважды щелкните файл NorthwindDataSet.xsd в обозревателе решений.
    2. Щелкните правой кнопкой мыши элемент OrdersTableAdapter и выберите пункт Добавить запрос.
    3. Оставьте параметр по умолчанию Использовать инструкции SQL и нажмите кнопку Далее.
    4. Оставьте параметр по умолчанию Инструкция SELECT, возвращающая строки и нажмите кнопку Далее.
    5. Добавьте в запрос предложение WHERE, чтобы возвратить Orders на основании CustomerID . Запрос должен выглядеть примерно следующим образом:

    Примечание Проверьте правильность синтаксиса параметров для своей базы данных. Например, в Microsoft Access предложение WHERE должно выглядеть следующим образом: WHERE CustomerID = ? .

    Создание метода в Form2 для передачи данных в

    1. Щелкните правой кнопкой мыши Form2 и выберите пункт Просмотреть код, чтобы открыть Form2 в редакторе кода.
    2. Добавьте следующий код в Form2 после метода Form2_Load :

    internal void LoadOrders(String CustomerID)
    Friend Sub LoadOrders(ByVal CustomerID As String) OrdersTableAdapter.FillByCustomerID(NorthwindDataSet.Orders, CustomerID) End Sub

    Создание метода в Form1 для передачи данных и отображения Form2

    1. В Form1 щелкните правой кнопкой мыши сетку данных клиентов и выберите пункт Свойства.
    2. В окне Свойства выберите События.
    3. Дважды щелкните событие CellDoubleClick. Откроется окно редактора кода.
    4. Обновите определение метода в соответствии со следующим примером:

    private void customersDataGridView_DoubleClick(object sender, EventArgs e)
    Private Sub CustomersDataGridView_DoubleClick() Handles CustomersDataGridView.DoubleClick Dim SelectedRowView As Data.DataRowView Dim SelectedRow As NorthwindDataSet.CustomersRow SelectedRowView = CType(CustomersBindingSource.Current, System.Data.DataRowView) SelectedRow = CType(SelectedRowView.Row, NorthwindDataSet.CustomersRow) Dim OrdersForm As New Form2 OrdersForm.LoadOrders(SelectedRow.CustomerID) OrdersForm.Show() End Sub

    Запуск приложения

    • Нажмите клавишу F5 для запуска приложения.
    • Дважды щелкните запись клиента в форме Form1, чтобы открыть Form2 с заказами этого клиента.

    Дальнейшие действия

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

    • Изменение набора данных для добавления или удаления объектов базы данных. Дополнительные сведения см. в разделе, посвященном созданию и настройке наборов данных.
    • Добавление функциональности для сохранения данных в базу данных. Дополнительные сведения см. в разделе Сохранение данных обратно в базу данных.

    См. также раздел

    Источник: learn.microsoft.com

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru