LabView+C#

ActiveX, .NET, DLL
Ответить
klo
interested
interested
Сообщения: 6
Зарегистрирован: 05 июн 2014, 01:58
Версия LabVIEW: 2012
Контактная информация:

LabView+C#

Сообщение klo »

Вопрос заключается в следующем, можно ли создавать например кнопки на панеле, посредству языка C#?
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2106
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 19 раз
Поблагодарили: 15 раз

Re: LabView+C#

Сообщение Borjomy_1 »

Никаких проблем: создаете визуальный компонент на C# под .NET и вставляете его в контейнер .NET, доступный через палитру контролов.
P.S. вопрос только в осознанной необходимости изобретать велосипед. Дело в том, что любой из стандартных контролов можно изменить практически до неузнаваемости штатными средствами. Если необходимо кардинально изменить свойства, то возможно создать свой контрол средствами Labview, через инструмент ControlX
klo
interested
interested
Сообщения: 6
Зарегистрирован: 05 июн 2014, 01:58
Версия LabVIEW: 2012
Контактная информация:

Re: LabView+C#

Сообщение klo »

А нет ни каких конкретных примеров реализации?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3820
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 6 раз
Поблагодарили: 86 раз
Контактная информация:

Re: LabView+C#

Сообщение dadreamer »

klo, а вас именно кнопки интересуют? Чем не угодили кнопки в :labview: ? Есть же и системные, и классические, ничем не отличающиеся от тех, что в Windows. Требуется какой-то специфический функционал?
klo
interested
interested
Сообщения: 6
Зарегистрирован: 05 июн 2014, 01:58
Версия LabVIEW: 2012
Контактная информация:

Re: LabView+C#

Сообщение klo »

именно, у меня цель сделать некую динамическую систему, которая принимает формулу и по ней синтезирует уже готовую схему, поэтому интересуюсь возможно ли по средствам ЯП C# создавать любые элементы на панеле.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3820
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 6 раз
Поблагодарили: 86 раз
Контактная информация:

Re: LabView+C#

Сообщение dadreamer »

Ну, если во что бы то ни стало нужно на C# создавать кнопки, то лучше обратиться на форум по C#, потому что предстоит непростая задача. Придется создать библиотеку классов (C# Class Library) и экспортировать оттуда все методы и свойства для создания-уничтожения кнопок и работы с ними. Для этого нужно иметь неплохой опыт работы с .NET и соответствующие знания. Если вас это не страшит, то посмотрите для начала пример LabVIEW 2012\examples\comm\dotnet\Calculator.llb . Там как раз используется библиотека, написанная на C#, для выполнения мат. операций, подробное описание и исходник можно посмотреть в контекстной справке :labview: , если навести курсор мыши на иконку :vi: .
klo
interested
interested
Сообщения: 6
Зарегистрирован: 05 июн 2014, 01:58
Версия LabVIEW: 2012
Контактная информация:

Re: LabView+C#

Сообщение klo »

c созданием библиотек С# нет проблем, не могу понять, как заставить :labview: создавать кнопки через мою dll библиотеку...
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3820
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 6 раз
Поблагодарили: 86 раз
Контактная информация:

Re: LabView+C#

Сообщение dadreamer »

Тут два варианта могут быть:
1) экспортируете кнопку как объект из библиотеки, после чего её можно вставить в :labview: с помощью контейнера на панели инструментов: Containers -> .NET Container. Потом ПКМ на контейнере -> Insert .NET Control -> Browse (в появившемся окне) -> выбираете свою DLL -> выбираете public control из списка;
2) динамически на блочной диаграмме создаете кнопку (в режиме Run-Time), для этого нужно, чтобы библиотека экспортировала конструктор объекта, деструктор и ряд методов/свойств, какие вам нужны.

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

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1253
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2022
Откуда: Германия
Поблагодарили: 3 раза
Контактная информация:

Re: LabView+C#

Сообщение AndreyDmitriev »

dadreamer писал(а): 2) динамически на блочной диаграмме создаете кнопку (в режиме Run-Time), для этого нужно, чтобы библиотека экспортировала конструктор объекта, деструктор и ряд методов/свойств, какие вам нужны.
... кнопку можно создать в любое время в процессе работы программы.
Вот тут я не совсем понял - нам ведь под эту кнопку .net контейнер на панели по-любому потребуется, или как?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3820
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 6 раз
Поблагодарили: 86 раз
Контактная информация:

Re: LabView+C#

Сообщение dadreamer »

AndreyDmitriev писал(а):Вот тут я не совсем понял - нам ведь под эту кнопку .net контейнер на панели по-любому потребуется, или как?
Здесь от реализации контрола дело зависит. Некоторые нестандартные контролы, особенно какие-нибудь shareware, могут быть отображены без контейнера, а например компоненты System.Windows.Forms отображаются только на форме, без формы они будут не видны. В принципе, можно назначить фронтальную панель :labview: в качестве родителя (Parent) для стандартных компонентов, но похоже нужно писать для этого обёртку или как-то извращаться (сходу не нашёл способа сделать это). А если создать предварительно форму, то вполне всё работает:
NET_Button.vi
LV2012
(11.06 КБ) 294 скачивания
Для красоты можно назначить лицевую панель обладателем (owner) формы, для этого нужна DLL отсюда:

[Расширение dll было запрещено, вложение больше недоступно.]

klo
interested
interested
Сообщения: 6
Зарегистрирован: 05 июн 2014, 01:58
Версия LabVIEW: 2012
Контактная информация:

Re: LabView+C#

Сообщение klo »

это конечно все круто, очень даже, спасибо за то что уделили время, но все же, я хотел бы найти способ создавать элементы напрямую на панеле :labview: , через класс на C# в котором например указаны параметры(название, положение и тд) и уже по этим параметрам элементы располагались на панеле :labview:
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3820
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 6 раз
Поблагодарили: 86 раз
Контактная информация:

Re: LabView+C#

Сообщение dadreamer »

:labview: предоставляет ActiveX интерфейс, которым можно пользоваться из других сред. Посмотрите статью http://www.ni.com/white-paper/5719/en/ , вот тут есть пример на VB, а тут на Матлабе, думаю, на C# сможете сделать.
klo
interested
interested
Сообщения: 6
Зарегистрирован: 05 июн 2014, 01:58
Версия LabVIEW: 2012
Контактная информация:

Re: LabView+C#

Сообщение klo »

Благодарю вас.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3820
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 6 раз
Поблагодарили: 86 раз
Контактная информация:

Re: LabView+C#

Сообщение dadreamer »

dadreamer писал(а):компоненты System.Windows.Forms отображаются только на форме, без формы они будут не видны
Совершенно случайно наткнулся на очень элегантный способ решения этой проблемы. Сам тред вот, а вся соль в том, что нужно на панели разместить сперва GroupBox стандартным способом: кинуть на FP .NET-контейнер и выбрать в нём System.Windows.Forms.GroupBox. А на диаграмме требуется создать объект System.Windows.Forms.BindingContext, который и будет управлять коллекцией контролов. После этого для GroupBox'а указывается созданный контекст и в GroupBox можно добавлять контролы.
Вложения
2015-04-18_20-41-42.jpg
2015-04-18_20-42-38.jpg
NET_Button-2.vi
lv2011
(8.81 КБ) 295 скачиваний
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приложениями»