Добрый день, пишем программку небольшую на C# чтобы автоматизировать некоторые действия
код такой:
using ZB;
using Zulu;
using ZuluLib;
namespace app
{
class Class1
{
public static void sdf()
{
Zulu.Zulu zApp = new Zulu.Zulu();
MapDoc zMapDoc = zApp.ActiveDocument.NativeDoc as MapDoc;
Layer L = zMapDoc.Layers.Active;
ElementKeys uch_keys = L.ElementKeys.SelectByType(6, 0);
ZbDatabase DB_Uch = new ZbDatabase();
DB_Uch.Open(L.ObjectTypes.GetItemByIndex(5).BaseName); //5 участки
for (int j = 1; j <= uch_keys.Count; j++)
{
int _sys = L.Elements.GetElement(uch_keys[j]).Key; //это Sys элемента
string _Begin_uch;
string _End_uch;
try
{
_Begin_uch = DB_Uch.SelectByKey(_sys).FieldValue[DB_Uch.SelectByKey(_sys).GetFieldIndexByName(0, "Begin_uch")];
_End_uch = DB_Uch.SelectByKey(_sys).FieldValue[DB_Uch.SelectByKey(_sys).GetFieldIndexByName(0, "End_uch")];
if (_End_uch.EndsWith(" п20"))
{
DB_Uch.UpdateBaseRecord(uch_keys[j], "Dpod", "0.1", null);
DB_Uch.UpdateBaseRecord(uch_keys[j], "Dobr", "0.1", null);
MessageBox.Show(_sys.ToString());
}
}
catch (Exception e)
{
MessageBox.Show(e);
}
}
}
}
}
программа обращается к активному сейчас слою, ищет на нем определенные участки, и меняет диаметр трубопровода
uch_keys.Count=3623; (столько у нас участков на слое)
но когда в цикле доходит до j=1871 то программа вылетает на строчке
_Begin_uch = DB_Uch.SelectByKey(_sys).FieldValue[DB_Uch.SelectByKey(_sys).GetFieldIndexByName(0, "Begin_uch")];
с сообщением
"ссылка на объект не указывает на экземпляр объекта"
Что пробовал:
1) перед циклом ручками написать
_Begin_uch = DB_Uch.SelectByKey(1871).FieldValue[DB_Uch.SelectByKey(1871).GetFieldIndexByName(0, "Begin_uch")]; - ошибки не вызывает
затем цикл всеравно вылетает на j=1871
2)сделать цикл for (int j = 1870; j <= uch_keys.Count; j++) - ошибки не вылетает, программа завершается нормально
3) пробовал сделать два цикла один от j=1 до j=1870 следом второй от j = 1870; j <= uch_keys.Count вылетает во втором цикле на 1871 опять
эта ошибка вылазит не всегда, не могу закономерность уловить из-за чего она появляется...
Подскажите в какую сторону копать?
UPD: а сейчас вот на 2805 вылетело... на строчке int _sys = L.Elements.GetElement(uch_keys[j]).Key; //это Sys элемента
код такой:
using ZB;
using Zulu;
using ZuluLib;
namespace app
{
class Class1
{
public static void sdf()
{
Zulu.Zulu zApp = new Zulu.Zulu();
MapDoc zMapDoc = zApp.ActiveDocument.NativeDoc as MapDoc;
Layer L = zMapDoc.Layers.Active;
ElementKeys uch_keys = L.ElementKeys.SelectByType(6, 0);
ZbDatabase DB_Uch = new ZbDatabase();
DB_Uch.Open(L.ObjectTypes.GetItemByIndex(5).BaseName); //5 участки
for (int j = 1; j <= uch_keys.Count; j++)
{
int _sys = L.Elements.GetElement(uch_keys[j]).Key; //это Sys элемента
string _Begin_uch;
string _End_uch;
try
{
_Begin_uch = DB_Uch.SelectByKey(_sys).FieldValue[DB_Uch.SelectByKey(_sys).GetFieldIndexByName(0, "Begin_uch")];
_End_uch = DB_Uch.SelectByKey(_sys).FieldValue[DB_Uch.SelectByKey(_sys).GetFieldIndexByName(0, "End_uch")];
if (_End_uch.EndsWith(" п20"))
{
DB_Uch.UpdateBaseRecord(uch_keys[j], "Dpod", "0.1", null);
DB_Uch.UpdateBaseRecord(uch_keys[j], "Dobr", "0.1", null);
MessageBox.Show(_sys.ToString());
}
}
catch (Exception e)
{
MessageBox.Show(e);
}
}
}
}
}
программа обращается к активному сейчас слою, ищет на нем определенные участки, и меняет диаметр трубопровода
uch_keys.Count=3623; (столько у нас участков на слое)
но когда в цикле доходит до j=1871 то программа вылетает на строчке
_Begin_uch = DB_Uch.SelectByKey(_sys).FieldValue[DB_Uch.SelectByKey(_sys).GetFieldIndexByName(0, "Begin_uch")];
с сообщением
"ссылка на объект не указывает на экземпляр объекта"
Что пробовал:
1) перед циклом ручками написать
_Begin_uch = DB_Uch.SelectByKey(1871).FieldValue[DB_Uch.SelectByKey(1871).GetFieldIndexByName(0, "Begin_uch")]; - ошибки не вызывает
затем цикл всеравно вылетает на j=1871
2)сделать цикл for (int j = 1870; j <= uch_keys.Count; j++) - ошибки не вылетает, программа завершается нормально
3) пробовал сделать два цикла один от j=1 до j=1870 следом второй от j = 1870; j <= uch_keys.Count вылетает во втором цикле на 1871 опять
эта ошибка вылазит не всегда, не могу закономерность уловить из-за чего она появляется...
Подскажите в какую сторону копать?
UPD: а сейчас вот на 2805 вылетело... на строчке int _sys = L.Elements.GetElement(uch_keys[j]).Key; //это Sys элемента