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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > .NET 4.5. Баг с .MdiDocumentManager.ActiveDocument (Автокад 2015-17)

.NET 4.5. Баг с .MdiDocumentManager.ActiveDocument (Автокад 2015-17)

Ответ
Поиск в этой теме
Непрочитано 19.12.2018, 13:04
.NET 4.5. Баг с .MdiDocumentManager.ActiveDocument (Автокад 2015-17)
p_sh
 
новичок
 
Ярославль
Регистрация: 19.06.2005
Сообщений: 3,396

не нахожу свойства ActiveDocument или GetDocument() в библиотеке AcCoreMgd.dll, чтобы использовать с .Interop.AcadDocument

есть ли решение проблемы?

в версиях 2012, 18-19 работает
Просмотров: 12144
 
Автор темы   Непрочитано 20.12.2018, 08:08
#21
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


я не тороплюсь..

с использованием
for next: https://yadi.sk/i/QC49yDHRp9zo2g
p_sh вне форума  
 
Непрочитано 20.12.2018, 09:08
#22
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


Цитата:
Сообщение от p_sh Посмотреть сообщение
готовый проект https://yadi.sk/d/oWzio45REXcl3A
Я бы так не сказал, скорее заготовка и вот почему:
1. Использование зоопарка из VBA + Lisp + .NET
2. Использование абсолютных путей во всех методах, а если злобный админ или правила компании не позволяют создать каталог C:\p_sh.net\ , тогда что?
3. Вся логика программы внутри форм, более того, внутри кнопок.
4. Реакторы, которые Вы активируете по командам из лисп файла, поместите в автозагрузку dll, не издевайтесь над пользователем. Не так давно, на форуме обсуждали автозагрузку dll из Lisp, посмотрите, там более полный вариант, чем у Вас.
5. Методы P_sh_context_toolbar_load, AppEndOpen, AppNewDrawing, AppActivateDrawing класса P_sh_context_toolbar_load это лютый .... вызывать команду netload для загрузки команд определенных в этом же классе, простите, но это за гранью добра и зла.

ЗЫ.
Если что, то я не программист и программы писать не умею, на жизнь зарабатываю проектированием ЖБ конструкций.
Boxa вне форума  
 
Автор темы   Непрочитано 20.12.2018, 09:51
#23
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


Цитата:
зарабатываю проектированием ЖБ конструкций.
коллега. (зацените VBA https://yadi.sk/i/QC49yDHRp9zo2g )
Цитата:
и программы писать не умею
симметрично.
но меня устраивает уже тот факт, что:
1 использование удобно.
2 программа работает = выдает ожидаемый результат.

Я готов конечно расширять горизонты, но в случае если к этому будет необходимость или интерес.

с "классами" начал знакомится вот только что.
p_sh вне форума  
 
Непрочитано 20.12.2018, 10:17
#24
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


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

И еще совет, если уж Вам так нравиться работать с ini файлами (хотя это очень странно хранить настройки в INI, при наличии xml и json), выделите это в отдельные методы, т.к. натыкаться постоянно на конструкции типа:
Код:
[Выделить все]
Dim text As String = Strings.Space(255)
Dim text2 As String = "p_sh_contexttoolbar"
Dim text3 As String = "bmpfromcopy"
Dim text4 As String = ""
Dim arg_3A_4 As Long = 255L
Dim text5 As String = "C:\p_sh.net\p_sh_contexttoolbar.ini"
Dim num As Integer = CInt(P_Sh_context_toolbar_command.GetPrivateProfileString(text2, text3, text4, text, arg_3A_4, text5))
text = Strings.Left(text, num)
совсем не комильфо и постоянное обращение к диску явно снижает скорость работы, тут нужен несколько другой механизм, и если уж начали изучать классы, то погуглите, что такое синглтон и как с ним работать.
Boxa вне форума  
 
Автор темы   Непрочитано 20.12.2018, 10:27
#25
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


как понимаю тут о внутренней кухне речь, а если у пользователей спросить: почувствуют они разницу или нет.

создам тему в разделе автокад...
p_sh вне форума  
 
Непрочитано 20.12.2018, 11:40
#26
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 10,959


Цитата:
Сообщение от p_sh Посмотреть сообщение
как понимаю тут о внутренней кухне речь,
Здесь не о внутренней кухне - а о подходе к структуре программы. Еще один образец:

Код:
[Выделить все]
 
      this.Button11 = new Button();
      this.Button12 = new Button();
      this.Button13 = new Button();
      this.Button14 = new Button();
      this.Button15 = new Button();
      this.Button16 = new Button();
      ...
      this.Button53 = new Button();
      this.Button52 = new Button();
      this.Button51 = new Button();
и т.д.
А если понадобиться изменить количество кнопок? Скажете - все решаемо и пойдете копипастить строки кода?

Или открыть любой из учебников по WinForms и дочитать до главы о контейнерах. И тогда код примет более "опрятный" вид:

Код:
[Выделить все]
    ''' <summary>
    ''' Общий обработчик события нажатия кнопки
    ''' </summary>
    ''' <param name="sender">Источник сообщения - кнопка</param>
    ''' <param name="e">Дополнительные аргументы</param>
    Private Sub ActionClickButton(sender As Object, e As EventArgs)
        ' Получаем нажатую кнопку
        Dim lButton As Button = CType(sender, Button)
        ' Получаем информацию из Tag и просто отображаем. 
        ' А можно хранить любую информацию, хоть подготовленные команды к исполнению
        MsgBox("Нажата кнопка № " & CStr(lButton.Tag))
    End Sub


    ''' <summary>
    ''' Событие загрузки формы
    ''' </summary>
    ''' <param name="sender">Источник сообщения - форма</param>
    ''' <param name="e">Дополнительные аргументы</param>
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' Количество строк и столбцов (Можно вместо констант задавать из настроек динамически)
        Const CountRows = 10
        Const CountColumns = 10
        ' Создаем сетку-таблицу
        Dim lGrid As TableLayoutPanel = New TableLayoutPanel()
        ' Задаем отступы
        lGrid.Margin = New Padding(3)
        lGrid.Padding = New Padding(3)
        ' Задаем размещение во всю форму
        lGrid.Dock = DockStyle.Fill
        ' Задаем количество и стиль строк
        lGrid.RowCount = CountRows
        For i As Integer = 0 To CountRows - 1
            lGrid.RowStyles.Add(New RowStyle)
            lGrid.RowStyles(i).SizeType = SizeType.Percent
            lGrid.RowStyles(i).Height = 100 / CountRows
        Next i
        ' Задаем количество и стиль столбцов
        lGrid.ColumnCount = CountColumns
        For i As Integer = 0 To CountColumns - 1
            lGrid.ColumnStyles.Add(New ColumnStyle)
            lGrid.ColumnStyles(i).SizeType = SizeType.Percent
            lGrid.ColumnStyles(i).Width = 100 / CountColumns
        Next i
        ' Добавляем сетку на форму
        Me.Controls.Add(lGrid)
        ' В цикле заполняем кнопками
        For lRow As Integer = 1 To CountRows
            For lColumn As Integer = 1 To CountColumns
                ' Создаем объект кнопки
                Dim lButton As Button = New Button()
                ' Задаем все необходимые параметры кнопки
                lButton.Dock = DockStyle.Fill
                lButton.Tag = (lRow - 1) * 10 + lColumn
                lButton.Text = CStr(lButton.Tag)
                ' Подключаем обработчик нажатия кнопки (один на все кнопки)
                AddHandler lButton.Click, AddressOf ActionClickButton
                ' Добавляем в сетку в указанную ячейку
                lGrid.Controls.Add(lButton, lColumn - 1, lRow - 1)
            Next lColumn
        Next lRow
    End Sub
и можно будет дать пользователю настраивать - кому то и 10-ти кнопок хватит, кому то и сотни мало будет.
Сергей812 вне форума  
 
Автор темы   Непрочитано 20.12.2018, 11:46
#27
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


красиво.
Цитата:
открыть любой из учебников по WinForms
обработчик то у меня один...(почти)
а вот кнопки рисовать это да-с, учебник зря-с не открывали-с.

и главное: нужно было представлять, что он есть.

Последний раз редактировалось p_sh, 20.12.2018 в 11:59.
p_sh вне форума  
 
Непрочитано 20.12.2018, 12:03
#28
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 10,959


Цитата:
Сообщение от p_sh Посмотреть сообщение
обработчик то у меня один...(почти)
Хм, и где он почти один?

Код:
[Выделить все]
private void Button12_Click(object sender, EventArgs e)
private void Button13_Click(object sender, EventArgs e)
private void Button14_Click(object sender, EventArgs e)
и т.д.
Сергей812 вне форума  
 
Автор темы   Непрочитано 20.12.2018, 12:29
#29
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Хм, и где он почти один?

Код:
[Выделить все]
private void Button12_Click(object sender, EventArgs e)
private void Button13_Click(object sender, EventArgs e)
private void Button14_Click(object sender, EventArgs e)
и т.д.
унутре ссылка на одну функцию
p_sh вне форума  
 
Непрочитано 20.12.2018, 12:41
1 | 1 #30
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 10,959


Цитата:
Сообщение от p_sh Посмотреть сообщение
унутре ссылка на одну функцию
Там один и тот же код в десяток строк в каждом обработчике - полтысячи лишних строк. Когда можно было написать один обработчик даже в вашем варианте и просто присвоить всем кнопкам.

----- добавлено через ~9 мин. -----
отвыкайте от VBA стиля обработчиков -> не просто же так введен аргумент sender (ссылающийся на контрол-источник сообщения) в обработчиках событий контролов.
Сергей812 вне форума  
 
Непрочитано 20.12.2018, 15:08
#31
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


Цитата:
Сообщение от p_sh Посмотреть сообщение
коллега. (зацените VBA https://yadi.sk/i/QC49yDHRp9zo2g )
Т.к. Вы коллега и немного программируете, то отвечу честно и вероятно Вас обижу, но это должно пойти Вам на пользу. То, что я увидел, это:
1 - чудовищно долго и трудоемко, 2 - рекомендую познакомиться с динамическими блоками, 3 - рекомендую посмотреть на задачу под другим углом, что позволит существенно увеличить производительность на пару порядков.
Boxa вне форума  
 
Автор темы   Непрочитано 20.12.2018, 18:35
#32
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


коллега, ничуть.
1,2 может быть.
3. порядков
p_sh вне форума  
 
Автор темы   Непрочитано 29.12.2018, 08:53
#33
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


Цитата:
А если понадобиться изменить количество кнопок? Скажете - все решаемо и пойдете копипастить строки кода?

Или открыть любой из учебников по WinForms и дочитать до главы о контейнерах. И тогда код примет более "опрятный" вид:

Код:
[Выделить все]
    ''' <summary>
    ''' Общий обработчик события нажатия кнопки
    ''' </summary>
    ''' <param name="sender">Источник сообщения - кнопка</param>
    ''' <param name="e">Дополнительные аргументы</param>
    Private Sub ActionClickButton(sender As Object, e As EventArgs)
        ' Получаем нажатую кнопку
        Dim lButton As Button = CType(sender, Button)
        ' Получаем информацию из Tag и просто отображаем. 
        ' А можно хранить любую информацию, хоть подготовленные команды к исполнению
        MsgBox("Нажата кнопка № " & CStr(lButton.Tag))
    End Sub


    ''' <summary>
    ''' Событие загрузки формы
    ''' </summary>
    ''' <param name="sender">Источник сообщения - форма</param>
    ''' <param name="e">Дополнительные аргументы</param>
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' Количество строк и столбцов (Можно вместо констант задавать из настроек динамически)
        Const CountRows = 10
        Const CountColumns = 10
        ' Создаем сетку-таблицу
        Dim lGrid As TableLayoutPanel = New TableLayoutPanel()
        ' Задаем отступы
        lGrid.Margin = New Padding(3)
        lGrid.Padding = New Padding(3)
        ' Задаем размещение во всю форму
        lGrid.Dock = DockStyle.Fill
        ' Задаем количество и стиль строк
        lGrid.RowCount = CountRows
        For i As Integer = 0 To CountRows - 1
            lGrid.RowStyles.Add(New RowStyle)
            lGrid.RowStyles(i).SizeType = SizeType.Percent
            lGrid.RowStyles(i).Height = 100 / CountRows
        Next i
        ' Задаем количество и стиль столбцов
        lGrid.ColumnCount = CountColumns
        For i As Integer = 0 To CountColumns - 1
            lGrid.ColumnStyles.Add(New ColumnStyle)
            lGrid.ColumnStyles(i).SizeType = SizeType.Percent
            lGrid.ColumnStyles(i).Width = 100 / CountColumns
        Next i
        ' Добавляем сетку на форму
        Me.Controls.Add(lGrid)
        ' В цикле заполняем кнопками
        For lRow As Integer = 1 To CountRows
            For lColumn As Integer = 1 To CountColumns
                ' Создаем объект кнопки
                Dim lButton As Button = New Button()
                ' Задаем все необходимые параметры кнопки
                lButton.Dock = DockStyle.Fill
                lButton.Tag = (lRow - 1) * 10 + lColumn
                lButton.Text = CStr(lButton.Tag)
                ' Подключаем обработчик нажатия кнопки (один на все кнопки)
                AddHandler lButton.Click, AddressOf ActionClickButton
                ' Добавляем в сетку в указанную ячейку
                lGrid.Controls.Add(lButton, lColumn - 1, lRow - 1)
            Next lColumn
        Next lRow
    End Sub
и можно будет дать пользователю настраивать - кому то и 10-ти кнопок хватит, кому то и сотни мало будет.
попробовал реализовать предложенный вариант
получается интересно
p_sh вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > .NET 4.5. Баг с .MdiDocumentManager.ActiveDocument (Автокад 2015-17)

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автокад 2015 виснет при смене формата отображения точек markfsm AutoCAD 2 23.01.2018 08:40
Помогите решить проблему с настройками(?) автокад 2008, 2015: невозможно одновременно посылать на печать несколько листов Ir4a AutoCAD 1 16.03.2017 15:12
Автокад 2015. Долго думает при вводе с клавиатуры ошибочной команды Бали AutoCAD 3 11.12.2016 13:58