ADN Club > AutoCAD .NET API

Странное поведение Palette

(1/4) > >>

Андрей Бушман:
- 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 ---Андрей! Из личного уважения ко мне сделай еще одну вещь.
--- Конец цитаты ---
Пользуетесь моей добротой... :) Смотрите вложенный файл.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии