Оффтопик. Изучаем C#

Автор Тема: Оффтопик. Изучаем C#  (Прочитано 179759 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Atomohod

  • ADN OPEN
  • ****
  • Сообщений: 452
  • Карма: 1
Re: Оффтопик. Изучаем C#
« Ответ #165 : 25-05-2018, 19:55:58 »
Здравствуйте!
Не срабатывает установка размеров из списка в зависимости от пользовательского ввода через if else. В чем я неправ?
Код - C# [Выбрать]
  1. public class FormatsHandler
  2.    {
  3.         static double height;
  4.         static double width;
  5.  
  6.         static List<Format> listOfFormats = new List<Format>()
  7.       {
  8.       new Format(){ formatID="A4", height=297, width=210},// все в портретной ориентации
  9.       new Format(){ formatID="A3", height=420, width=297},
  10.       new Format(){ formatID="A2", height=594, width=420},
  11.       new Format(){ formatID="A1", height=841, width=594},
  12.       new Format(){ formatID="A0", height=1189, width=841}
  13.       };
  14.  
  15.         //Points of inner frame
  16.         Point2d keyPoint1 = new Point2d(-width + 25, height - 10);
  17.         Point2d keyPoint2 = new Point2d(0, height - 10);
  18.         Point2d keyPoint3 = new Point2d(0, 0);
  19.         Point2d keyPoint4 = new Point2d(-width + 25, 0);
  20.         //Points of outer frame
  21.         Point2d frPoint1 = new Point2d(-width + 5, height - 5);
  22.         Point2d frPoint2 = new Point2d(5, height - 5);
  23.         Point2d frPoint3 = new Point2d(5, -5);
  24.         Point2d frPoint4 = new Point2d(-width + 5, -5);
  25.  
  26.  
  27.         [CommandMethod("2Insert title")]
  28.  
  29.         public static void DrawTitles()
  30.         {
  31.             Format curFormat = GetDataFromUser();
  32.  
  33.  
  34.             if (curFormat.formatID == "A3" && curFormat.orientation == "Portrait" && curFormat.type == "Title")
  35.             {
  36.                 height = listOfFormats[1].height;
  37.                 width = listOfFormats[1].width;
  38.             }
  39.             else if(curFormat.formatID == "A3" && curFormat.orientation == "Landscape" && curFormat.type == "Title")
  40.             {
  41.                 height = listOfFormats[1].width;
  42.                 width = listOfFormats[1].height;
  43.             }
  44.  
  45. //                else if (curFormat.formatID == "A2" && curFormat.orientation == "Portrait" && curFormat.type == "Title")
  46. //                {
  47. //                height = listOfFormats[2].height;
  48. //                width = listOfFormats[2].width;
  49. //                }
  50. //else
  51. //            {
  52. //                height = listOfFormats[2].width;
  53. //                width = listOfFormats[2].height;
  54. //            }
  55.  
  56.  
  57.            
  58.  
  59.  
  60.  
  61.             FormatsHandler fh = new FormatsHandler();
  62.             fh.DrawMainTitle();
  63.  
  64.         }
  65.  
  66.         public static Format GetDataFromUser()
  67.         {
  68.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  69.  
  70.             //Выбрать формат
  71.             PromptKeywordOptions chFormat = new PromptKeywordOptions("\nChoose format: ");
  72.  
  73.             chFormat.Keywords.Add("A4");
  74.             chFormat.Keywords.Add("A3");
  75.             chFormat.Keywords.Add("A2");
  76.             chFormat.Keywords.Add("A1");
  77.             chFormat.Keywords.Add("A0");
  78.             chFormat.AllowNone = false;
  79.  
  80.             PromptResult formatID = acDoc.Editor.GetKeywords(chFormat);
  81.             //Application.ShowAlertDialog("The name entered was: "+formatID.StringResult);
  82.  
  83.             //Установить кратность
  84.             PromptStringOptions chMultiplier = new PromptStringOptions("\nSet multiplier: ");
  85.             chMultiplier.AllowSpaces = false;
  86.             PromptResult multiplier = acDoc.Editor.GetString(chMultiplier);
  87.  
  88.  
  89.             // Установить ориентацию
  90.             PromptKeywordOptions chOrient = new PromptKeywordOptions("\nSet orientation: ");
  91.  
  92.             chOrient.Keywords.Add("Portrait");
  93.             chOrient.Keywords.Add("Landscape");
  94.             chOrient.Keywords.Default = "Landscape";
  95.             chOrient.AllowNone = false;
  96.  
  97.             PromptResult orientation = acDoc.Editor.GetKeywords(chOrient);
  98.  
  99.  
  100.             // Установить тип
  101.             PromptKeywordOptions chType = new PromptKeywordOptions("\nSet type: ");
  102.  
  103.             chType.Keywords.Add("Title");
  104.             chType.Keywords.Add("Regular");
  105.             chType.Keywords.Default = "Regular";
  106.             chType.AllowNone = false;
  107.  
  108.             PromptResult type = acDoc.Editor.GetKeywords(chType);
  109.  
  110.  
  111.             Format curFormat = new Format()
  112.             {
  113.                 formatID = formatID.ToString(),
  114.                 multiplier = int.Parse(multiplier.StringResult),
  115.                 orientation = orientation.ToString(),
  116.                 type = type.ToString()
  117.             };
  118.  
  119.             return curFormat;
  120.  
  121.         }
  122.  
  123.         public void DrawMainTitle()
  124.         {
  125.  
  126.         }
  127.  
 
« Последнее редактирование: 25-05-2018, 21:09:39 от Atomohod »

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #166 : 26-05-2018, 10:56:52 »
Не срабатывает установка размеров из списка в зависимости от пользовательского ввода через if else.
А как проявляется это самое "не срабатывает"?

Оффлайн Atomohod

  • ADN OPEN
  • ****
  • Сообщений: 452
  • Карма: 1
Re: Оффтопик. Изучаем C#
« Ответ #167 : 26-05-2018, 11:58:25 »
Рамки рисуются каким-то невероятным образом, хотя при жестком указании height и width все отрабатывает нормально. Проблема в том, что нужно изменение поведения программы в зависимости от пользовательского ввода. Пытался реализовать не через if else, а через switch - тоже не срабатывало-я пролетал на default минуя все case, но там хотя бы рисовалась рамка для дефолтного формата, а через if вообще какая-то ерунда.


Может я что-то упустил в структуре программы или не так записал в синтаксисе?
На форуме мне предлагали способ со вставкой форматки из готового блока в dwg, я с ним согласен, но задачу мне поставили по- другому поэтому все надо через dll.

Оффлайн Kisli

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #168 : 16-06-2018, 15:49:52 »
Здравствуйте. Проблема в задании стилей для WPF. Хочется сделать это централизовано как в обычном WPF приложении. Но так как вынужден делать через библиотеку классов, не получается подключить ResourseDictionary со стилями, так же просто (обычно это делал через App.xaml), но в библиотеке классов нет такой возможности. Есть ли решение этой проблемы?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #169 : 16-06-2018, 17:27:39 »
Есть ли решение этой проблемы?
Если я правильно понял вопрос, то может это подойдёт:
https://stackoverflow.com/questions/19270018/wpf-style-for-control-library
https://stackoverflow.com/questions/9739032/set-up-application-resources-from-code
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Kisli

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #170 : 17-06-2018, 12:43:40 »
Есть ли решение этой проблемы?
Если я правильно понял вопрос, то может это подойдёт:
https://stackoverflow.com/questions/19270018/wpf-style-for-control-library
https://stackoverflow.com/questions/9739032/set-up-application-resources-from-code

Благодарю, попробую эти решения!

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #171 : 17-06-2018, 13:14:01 »
Здравствуйте. Проблема в задании стилей для WPF. Хочется сделать это централизовано как в обычном WPF приложении. Но так как вынужден делать через библиотеку классов, не получается подключить ResourseDictionary со стилями, так же просто (обычно это делал через App.xaml), но в библиотеке классов нет такой возможности. Есть ли решение этой проблемы?
Все там замечательно подключается и работает!
Во-первых - посмотрите как нужно использовать URI типа Pack (это то, что вам и нужно)
Во-вторых - смотрите готовые библиотеки оформления и инструкции к ним. Например, Mahapps Metro отлично демонстрирует как следует подключать xaml-ресурсы:
Код - XML [Выбрать]
  1. <Application x:Class="WpfApplication.App"
  2.             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.             StartupUri="MainWindow.xaml">
  5.   <Application.Resources>
  6.     <ResourceDictionary>
  7.       <ResourceDictionary.MergedDictionaries>
  8.         <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
  9.         <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
  10.         <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
  11.         <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
  12.         <!-- Accent and AppTheme setting -->
  13.         <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
  14.         <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
  15.       </ResourceDictionary.MergedDictionaries>
  16.     </ResourceDictionary>
  17.   </Application.Resources>
  18. </Application>

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Оффтопик. Изучаем C#
« Ответ #172 : 17-06-2018, 13:39:20 »
Саня, твой вариант подходит для своего WPF приложения.
А автокад это не WPF приложение. У него System.Windows.Application.Current пустое.
Один раз такое пробовал:
Код - C# [Выбрать]
  1.              if (System.Windows.Application.Current == null)
  2.             {
  3.                 new System.Windows.Application {ShutdownMode = ShutdownMode.OnExplicitShutdown};
  4.             }
  5.             System.Windows.Application.Current.Resources.MergedDictionaries.Add(System.Windows.Application.LoadComponent(
  6.                     new Uri("AcadTest;component/Style.xaml", UriKind.Relative)) as ResourceDictionary);
Рисковый вариант. Т.к. может подействовать на весь интерфейс автокада:



Мне кажется, правильнее сделать файл стилей и подгружать его в свои окна или контролы:
     
Код - XML [Выбрать]
  1.     <Window.Resources>
  2.         <ResourceDictionary>
  3.             <ResourceDictionary.MergedDictionaries>
  4.                 <ResourceDictionary Source="Resources/Style.xaml" />
  5.             </ResourceDictionary.MergedDictionaries>
  6.         </ResourceDictionary>
  7.     </Window.Resources>
Можно через базовый класс. Я так и делаю.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #173 : 17-06-2018, 13:46:09 »
Вильдар, все решается намного проще - нужно ResourceDictionary подключать не к App.xaml, а к ресурсам каждого окна. Может это и не универсально, зато точно работает

Оффлайн Kisli

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #174 : 17-06-2018, 17:42:41 »
Вильдар, все решается намного проще - нужно ResourceDictionary подключать не к App.xaml, а к ресурсам каждого окна. Может это и не универсально, зато точно работает

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

Оффлайн Kisli

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #175 : 17-06-2018, 17:46:39 »
Вильдар, все решается намного проще - нужно ResourceDictionary подключать не к App.xaml, а к ресурсам каждого окна. Может это и не универсально, зато точно работает
Благодарю!

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #176 : 01-09-2018, 21:46:58 »
Здравствуйте. подскажите пожалуйста.
работая в visual studio c# возможно ли проверять код не перезапуская автокад?
пока что приходится каждый раз компилировать , затем открывать автокад, подгружать dll, и только затем тестировать.
при попытке скомпилировать измененный код выдает ошибку. закрыв автокад все норм.
спасибо!

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #177 : 01-09-2018, 23:31:53 »
работая в visual studio c# возможно ли проверять код не перезапуская автокад?
По простому - нет.
Если очень хочется - можете попробовать динамическое прототипирование

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Оффтопик. Изучаем C#
« Ответ #178 : 03-09-2018, 08:13:29 »
работая в visual studio c# возможно ли проверять код не перезапуская автокад?
Есть такой вариант https://github.com/vildar82/AcadAddinManager
Каждый раз, грузится новая сборка и через рефлексию запускается метод выбранной команды.
Работает, примерно, как AddinManager в Revit.

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #179 : 11-11-2018, 21:19:29 »
Здравствуйте.
Наверное здесь не в тему, но больше некуда. Вы самые общительные - выручайте!
такая проблема
в WinForm следующий код работает:

Код - C# [Выбрать]
  1. private void listBoxFiles_DragEnter(object sender, DragEventArgs e)
  2.         {
  3.             if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
  4.             {
  5.                 e.Effect = DragDropEffects.All;
  6.             }
  7.         }

а аналогичный в WPF (за исключение вместо Effect там будет Effects ) не работает:

Код - C# [Выбрать]
  1. private void listBoxFiles_DragEnter(object sender, DragEventArgs e)
  2.         {
  3.             if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
  4.             {
  5.                 e.Effects = DragDropEffects.All;
  6.             }
  7.         }

что я не так делаю?

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

Спасибо!