ADN Club > AutoCAD .NET API
Странное поведение Palette
Андрей Бушман:
- AutoCAD 2009 x86 SP3 Enu
- Windows XP x86 SP3 Rus
Палитра инструментов изначально открывается не в том виде (позиция\размеры\свойства), который мною назначался в коде:
--- Код - C# [Выбрать] ---/// <summary>/// This command displays the "Sheet Set Viewer" palette./// </summary>[Rtm.CommandMethod(ns, "ss-viewer", Rtm.CommandFlags.Session)]public void OpenSheetSetViewer() { // Create the new palette set Win.PaletteSet palette_set = new Win.PaletteSet( "Sheet Set Viewer"); ElementHost host = new ElementHost(); host.AutoSize = true; host.Dock = DockStyle.Fill; // Host my WPF control SheetSetViewer control = new SheetSetViewer(); // Save the link to the custom control control.tree.Tag = control; control.props.Tag = control; host.Child = control; // Create the new tab in the palette set Win.Palette palette = palette_set.Add("Sheet set's tree", host); GetOpenedSheetSets(control); // Fill the combo box (sheet sets list) // Update the info, when other sheet set was selected from the combo box. control.cboSheetSets.SelectionChanged += new WPF.SelectionChangedEventHandler( cboSheetSets_SelectionChanged); // Update the property's info, when other item was selected in the sheet set tree. control.tree.SelectedItemChanged += new System.Windows .RoutedPropertyChangedEventHandler<object>(tree_SelectedItemChanged); palette_set.Style = Win.PaletteSetStyles.ShowCloseButton | Win.PaletteSetStyles.ShowPropertiesMenu | Win.PaletteSetStyles.ShowAutoHideButton; palette_set.Size = new Size(400, 600); // Position of top left corner of palette palette_set.Location = new Point(400, 400); // Let the palette set can be docked only to left\right by the user palette_set.DockEnabled = Win.DockSides.Left | Win.DockSides.Right; // Uncheck the "Allow Docking" (as I expect). palette_set.Dock = Win.DockSides.None; // Display the palette set palette_set.KeepFocus = true; palette_set.Visible = true;}
Однако при вызове команды ss-viewer палитра открывается в виде, показанном ниже файлом 0.png. Если я вручную оттаскиваю палитру от края и открываю её свойства, то вижу, что опция прикрепления включена, хотя я её отключал в коде, а так же прописывал координаты левого верхнего угла палитры (см. второе изображение: 1.png).
Если я поменяю местами два фрагмента кода:
--- Код - C# [Выбрать] ---// Display the palette setpalette_set.KeepFocus = true;palette_set.Visible = true; palette_set.Style = Win.PaletteSetStyles.ShowCloseButton | Win.PaletteSetStyles.ShowPropertiesMenu | Win.PaletteSetStyles.ShowAutoHideButton;palette_set.Size = new Size(400, 600);// Position of top left corner of palettepalette_set.Location = new Point(400, 400);// Let the palette set can be docked only to left\right by the userpalette_set.DockEnabled = Win.DockSides.Left | Win.DockSides.Right;// Uncheck the "Allow Docking" (as I expect).palette_set.Dock = Win.DockSides.None;
т. е. сначала отображаю палитру и только после этого начинаю править её настройки, то она открывается не прикреплённой, а так, как показано на скрине 2.png. Причём изначально палитра открывается прикреплённой к левому краю, но через долю секунды отлипает и занимает ту позицию, которая показана. При этом на самом деле позиция и размеры палитры не те, которые я указывал в коде. Однако и это ещё не всё...
Если сначала изменить свойство Dock, а потом менять остальные:
--- Код - C# [Выбрать] ---// Display the palette setpalette_set.KeepFocus = true;palette_set.Visible = true; // Uncheck the "Allow Docking" (as I expect).palette_set.Dock = Win.DockSides.None;palette_set.Style = Win.PaletteSetStyles.ShowCloseButton | Win.PaletteSetStyles.ShowPropertiesMenu | Win.PaletteSetStyles.ShowAutoHideButton;palette_set.Size = new Size(400, 600);// Position of top left corner of palettepalette_set.Location = new Point(400, 400);// Let the palette set can be docked only to left\right by the userpalette_set.DockEnabled = Win.DockSides.Left | Win.DockSides.Right;
то в этом случае палитра открывается так, как показано на 4.png. Обратите внимание на позицию и размеры палитры - в этот раз они правильные, как я и задавал в коде.
Но и это ещё не всё!
--- Код - C# [Выбрать] ---// Uncheck the "Allow Docking" (as I expect).palette_set.Dock = Win.DockSides.None; // Display the palette setpalette_set.KeepFocus = true;palette_set.Visible = true; palette_set.Style = Win.PaletteSetStyles.ShowCloseButton | Win.PaletteSetStyles.ShowPropertiesMenu | Win.PaletteSetStyles.ShowAutoHideButton;palette_set.Size = new Size(400, 600);// Position of top left corner of palettepalette_set.Location = new Point(400, 400);// Let the palette set can be docked only to left\right by the userpalette_set.DockEnabled = Win.DockSides.Left | Win.DockSides.Right;
При таком порядке редактирования свойств палитра вообще не появляется! Безобразный результат выглядит так, как показано в файле 5.png.
В моём понимании, поведение палитры не должно отличаться при перестановке местами обозначенных мною строк кода.
Почему так происходит? Предполагаю, что это баг, поскольку конечный результат, в виде состояния объекта, не должен зависеть от порядка изменения его свойств.
Спасибо.
Александр Ривилис:
Проверь повторяется ли такое поведение и в последних версиях AutoCAD.
Андрей Бушман:
--- Цитата: Александр Ривилис от 29-11-2013, 14:37:14 ---Проверь повторяется ли такое поведение и в последних версиях AutoCAD.
--- Конец цитаты ---
Я так понял, что с подобным поведением вы не сталкивались, и скорее всего это баг... :(
Только из личного уважения к вам, проверил под AutoCAD 2014 x64 SP1 Enu (который мне абсолютно не сдался) - всё то же самое один в один, так что можете отправлять на эту тему сообщение в ADN (хотя вряд ли они на это обратят внимание в виду того, что даже более серьёзные моменты порой годами лежат в wish list мёртвым грузом). :(
Странно, что за столько лет этого никто не заметил, хотя... Кеан Волмслей 100% это видел, когда писал примеры, но в своём блоге об этом предпочёл скромно промолчать (или может я всё же плохо искал, а он сообщал об этом?)...
Александр Ривилис:
--- Цитата: Андрей Бушман от 29-11-2013, 16:12:11 ---Только из личного уважения к вам, проверил под AutoCAD 2014 x64 SP1 Enu - всё то же самое один в один, так что можете отправлять на эту тему сообщение в ADN.
--- Конец цитаты ---
Андрей! Из личного уважения ко мне сделай еще одну вещь. Создай три метода создания палитры (дающие разные результаты) в одном проекте VS под AutoCAD 2014, и выложи его на форум, чтобы я мог его отправить в ADN DevHelp. Я сталкивался с аналогичным поведением (когда порядок установки свойств влиял на итоговое поведение) в других вещах в ObjectARX.
Андрей Бушман:
--- Цитата: Александр Ривилис от 29-11-2013, 16:18:49 ---Андрей! Из личного уважения ко мне сделай еще одну вещь.
--- Конец цитаты ---
Пользуетесь моей добротой... :) Смотрите вложенный файл.
Навигация
Перейти к полной версии