GeodatabaseUI.ICalculatorUI2 больше не работает в ArcMap 10.1 (почему нет представлений?)

У меня есть надстройка, которая была перенесена из ArcMap 9.3 в 10.1, и этот код отлично работал в 9.3, но по какой-то причине вообще не будет работать в 10.1:

ICalculatorUI calc = new CalculatorUI();
calc.Table = MyTable;
calc.Field = "MyField";
calc.DoModal(ArcMap.Application.hWnd);

Фактический код немного сложнее, но я попробовал его с этой упрощенной версией, и она все еще не работает.

Что происходит, так это то, что диалоговое окно калькулятора появляется очень хорошо, и я могу ввести значение для установки поля, но когда я нажимаю кнопку «ОК», диалоговое окно закрывается без ошибок, но ничего не обновляется.

Я открыл таблицу, которую редактирую, с помощью обычного пользовательского интерфейса ArcMap, запустил Калькулятор поля в том же поле и могу подтвердить, что он выглядит точно так же, как я вижу, когда использую этот фрагмент кода в своей собственной форме. Отличий всего три:

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

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

В ArcMap 9.3 ICalculatorUI берет на себя все, как только вызывается DoModal. Досадно, что он даже не обеспечивал программную обратную связь, чтобы показать, отменил ли пользователь диалоговое окно или [если/сколько] строк было обновлено. Очень черный ящик, и это было отстойно, но, по крайней мере, это работало!

Я нигде не смог найти никакой помощи по этому поводу, особенно в жалкой документации ESRI, которая, похоже, скопирована и вставлена ​​из их документации 9.x.

РЕДАКТИРОВАТЬ: Почему нет просмотров? Прошло несколько дней, и это показывает, что вопрос просматривался только дважды, оба из которых были мной (это редактирование составляет 3). Другой вопрос, который я задал год назад, получил значок перекати-поле, и единственной активностью было то, что я оставил комментарий - никаких ответов и все еще всего 40 просмотров (большинство из них мои, я уверен). Ну что, как поживаешь? SO прячет мои вопросы где-то в кладовке?? Мне действительно нужна помощь с этим...


person CptRobby    schedule 12.06.2014    source источник


Ответы (1)


Я не пытался использовать ICalculatorUI до версии 10.1, но я предполагаю, что вам нужно использовать интерфейс ICalculator для выполнения фактических вычислений (при условии, что переменная calc определена как выше в вашем вопросе)

ICalculator calculator = new Calculator();
calculator.Expression = calc.Expression;
calculator.PreExpression = calc.PreExpression;
calculator.Field = "MyField";
calculator.Cursor = table.Search(null, false);
calculator.Calculate();
person omarello    schedule 25.06.2014
comment
Спасибо за ответ, но это не так, как должно работать. Как указано в моем вопросе, ICalculatorUI будет (досадно) делать все самостоятельно после вызова DoModal. И хотя вы можете получить Expression и PreExpression из ICalculatorUI и установить их на ICalculator, вы не можете указать ISelectionSet, чтобы отфильтровать только выбранные записи. Кроме того, если пользователь выбрал Python вместо VBScript, это не сработает, потому что нет возможности использовать Python с ICalculator. Спасибо за вашу попытку. +1 за усилия. ;) - person CptRobby; 25.06.2014
comment
Да, я попробовал это со строковым значением только для примера, и это сработало. Не уверен насчет всех других случаев, так как мне не нужно было использовать это ни в одном из моих проектов arcobject :) - person omarello; 25.06.2014
comment
Оказывается, вы можете получить курсор обновления из ISelectionSet2, так что это то, что я сейчас делаю в качестве обходного пути. Итак, я продолжу, приму этот ответ и двинусь дальше. Спасибо. :) - person CptRobby; 04.07.2014