| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Forms в .NET DLL

Forms в .NET DLL

Ответ
Поиск в этой теме
Непрочитано 02.09.2012, 22:57 #1
Forms в .NET DLL
Дмитрий Асташев
 
päällikön suunnittelijat
 
Pietari, Venäjä
Регистрация: 04.12.2010
Сообщений: 63

Уважаемые друзья!
В двух словах подскажите, где поискать, как добавить к .NET приложению для AutoCAD форму с контролами (Form with Controls).
В Lab8 из AutoCAD .NET API Training этого не нашел.
Просмотров: 4807
 
Непрочитано 02.09.2012, 23:53
#2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Посмотри здесь:
http://www.acadnetwork.com/topic-79.0.html

~'o'~
Олег (jr.) вне форума  
 
Непрочитано 03.09.2012, 00:34
#3
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


На мой взгляд, если используешь .NET, то просто грех пользоваться Forms! Надо пользоваться WPF!!! Но это мое ИМХО
Modis вне форума  
 
Непрочитано 03.09.2012, 10:26
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Добавляешь в свой проект MS VS новый элемент формы, как ты это делаешь обычно для своих десктопных приложений и лепишь на него нужные тебе контролы. Для того, чтобы открыть это окно в процессе работы твоей команды, вызываешь вариант, нужный в твоём случае:

1.
Код:
[Выделить все]
Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(...)
- открыть окно модальным.
2.
Код:
[Выделить все]
Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(...)
- открыть окно немодальным.

P.S. То, что между буквами "S" и "h" отображается пробел (в присутствующих выше словах "ShowModalDialog" и "ShowModelessDialog")- это баг данного форума. В оригинальном тексте этого нет.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось Кулик Алексей aka kpblc, 03.09.2012 в 10:35.
hwd вне форума  
 
Непрочитано 03.09.2012, 10:36
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Цитата:
Сообщение от hwd Посмотреть сообщение
То, что между буквами "S" и "h" отображается пробел
Уже не отображается
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.09.2012, 16:25
#6
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Цитата:
Сообщение от hwd Посмотреть сообщение
чтобы открыть это окно в процессе работы
Подскажите, где, в случае (Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog) нужно указывать имя формы?

Попробовал вариант, типа:

Dim frm as New MyProject.Form1
frm.Show()

Это работает. Единственно, как-то коряво, открывается не в MDI, а само по себе . Нужно искать родительское окно.
Дмитрий Асташев вне форума  
 
Непрочитано 04.09.2012, 16:40
#7
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


А ты из каких соображений не смотришь сигнатуру указанного мною выше метода и его описание в справке, а так же не пользуешься поиском в Google? Просто лень? Открой справку в ObjectARX SDK и глупые вопросы отпадут.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 04.09.2012, 16:51
#8
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Цитата:
Сообщение от hwd Посмотреть сообщение
Просто лень?
Третий день бьюсь. Все интернеты излазил.
Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessWindow() - это перегруженный метод с 5 вариантами аргументов. Не хочет принимать в качестве аргумента имя моего окна. Есть пара строк примера, как конкретно нужно делать?
Дмитрий Асташев вне форума  
 
Непрочитано 04.09.2012, 16:55
#9
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Дмитрий Асташев Посмотреть сообщение
Третий день бьюсь. Все интернеты излазил.
Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessWindow() - это перегруженный метод с 5 вариантами аргументов. Не хочет принимать в качестве аргумента имя моего окна. Есть пара строк примера, как конкретно нужно делать?
У тебя со вниманием как?
Я тебе писал о таких методах:
Код:
[Выделить все]
ShowModalDialog
ShowModelessDialog
Ты же лепишь
Код:
[Выделить все]
ShowModelessWindow
Сравни по буквам. То, что я показывал тебе - для WinForms, как ты и просил. Тот метод, который ты лепишь по факту (ShowModelessWindow) - это WPF. Разницу чуешь? Это две совершенно разные технологии построения GUI. Объяснять, чем отличается WinForms от WPF не буду - Google отлично поможет тебе в этом.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 04.09.2012, 19:26
#10
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Вставил из Lab8 кусок, чудо. Это работает!!!

Код:
[Выделить все]
' declare a paletteset object, this will only be created once
    Public myPaletteSet As Autodesk.AutoCAD.Windows.PaletteSet
    ' we need a palette which will be housed by the paletteSet
    Public myPalette As UserControl1

    ' palette command
    <CommandMethod("palette")> _
    Public Sub palette()

        ' check to see if it is valid
        If (myPaletteSet = Nothing) Then
            ' create a new palette set, with a unique guid
            myPaletteSet = New Autodesk.AutoCAD.Windows.PaletteSet("My Palette", New Guid("D61D0875-A507-4b73-8B5F-9266BEACD596"))
            ' now create a palette inside, this has our tree control
            myPalette = New UserControl1
            ' now add the palette to the paletteset
            myPaletteSet.Add("Palette1", myPalette)

        End If

        ' now display the paletteset
        myPaletteSet.Visible = True

    End Sub
Одна беда. Если процедура вызывается с кнопки на контроле (или на форме, вызываемой, как я описывал выше) посреди выполнения происходит сбой (начинает выполняться, а потом происходит сбой) по необрабатываемому исключению. (Autodesk.AutoCAD.Runtime.Exception: eLockViolation)
Кнопка только вызывает Sub.
Код:
[Выделить все]
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Class1.MySub1()
    End Sub
При вызове той же процедуры из командной строки все работает нормально.
Процедура описана как
Код:
[Выделить все]
<CommandMethod("MySub1")> _
    Public Shared Sub MySub1()
1...
2...
3profit
End Sub
Пробовал убирать Shared и вызывать

Код:
[Выделить все]
   Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim C1 As New Class1
        C1.MySub1()
    End Sub
Результат тот же.

В чем могут быть нюансы в том, с кнопки вызывается процедура или из строки?
Дмитрий Асташев вне форума  
 
Непрочитано 04.09.2012, 19:34
1 | #11
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Тебе четко написали - заблокируй документ!
Цитата:
Autodesk.AutoCAD.Runtime.Exception: eLockViolation
Вот тут глянь

Последний раз редактировалось Modis, 04.09.2012 в 19:40. Причина: Добавил ссылку
Modis вне форума  
 
Непрочитано 04.09.2012, 20:00
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™



__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 04.09.2012, 21:00
#13
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Modis: спасибо, +500 к репутации.
hwd... не знаю, что сказать. детский сад какой-то...

Все работает
Код:
[Выделить все]
 Public Sub asdNumBlocks()
        Dim docloc As DocumentLock = Application.DocumentManager.MdiActiveDocument.LockDocument()
        Using docloc....
P.S. Еще обнаружил, чтобы описанный выше контрол myPalette работал, он обязательно должен быть Shared
Public Shared myPaletteSet As Autodesk.AutoCAD.Windows.PaletteSet
Public Shared myPalette As UserControl1

Последний раз редактировалось Дмитрий Асташев, 05.09.2012 в 20:11.
Дмитрий Асташев вне форума  
 
Непрочитано 31.08.2013, 08:16
#14
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


В общем то есть код, создает новую палитру...
Но вот добавить элементы в эту палитру чегой то не получается.
Идея следующая, создавать программно палитру, на основании содержания определенной папки.
В этой папке будут лежать файлы lisp, программа будет считывать содержимое файлов(первую строку в которой будет описываться команда автокада).
И создавать элементы в палитре.
Можно может есть еще какие то варианты создания собственного меню программно, на vb.net...
Код:
[Выделить все]
[VB]Public Class Class2

    ' auto-enable our toolpalette for AutoCAD
    Implements Autodesk.AutoCAD.Runtime.IExtensionApplication

    Friend Sub Initialize() Implements IExtensionApplication.Initialize
    End Sub

    Friend Sub Terminate() Implements IExtensionApplication.Terminate
    End Sub

    ' ensure single instance of this app...
    Friend Shared ps As Autodesk.AutoCAD.Windows.PaletteSet = Nothing

    <CommandMethod("PS")> _
    Public Sub buildPalette()

        If ps Is Nothing Then
            ' use constructor with Guid so that we can save/load user data
            ' Guid is stored in the registry to keep the unique value.
            ps = New Autodesk.AutoCAD.Windows.PaletteSet("PartList", New Guid("{94BEBD9F-DA71-46f3-9F56-1F5C6CF4C7E1}"))
            Dim myCtrl As New Windows.Forms.UserControl
            myCtrl.Name = "name"
            ps.Add("Panel", myCtrl)

            ps.Add("Panel2", myCtrl)
        End If
        ps.Visible = True

    End Sub
End Class[/VB]
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Forms в .NET DLL

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Hello, World на AutoCAD .NET DLL Дмитрий Асташев .NET 24 05.09.2012 12:54
Транзакции AutoCAD .NET DLL Дмитрий Асташев .NET 9 05.09.2012 09:13
Как загружать сборку .NET в AutoCAD? Shraybicus .NET 10 25.04.2011 15:08
Функции AutoLISP из ... DLL! Supermax LISP 21 27.06.2010 14:18
.Net событие double-click как поймать dvim .NET 7 04.04.2010 15:13