Nie ufajcie Visual Studio! (AutoCAD .NET API)
maj 25th, 2011. Brak komentarzy.
Kategorie: AutoCAD, C#, Zabawy z kodem.
Visual Studio to genialne narzędzie. Serio, bez sarkazmu. Interfejs jest przyjemny, działa w miarę szybko, a IntelliSense to cud świata informatyki. Wszędzie podpowiadanie, podkreślanie błędów, wszystko czego trzeba!
Czasem aż za dużo :)
Tak wyszło, że zabrałem się za programowanie AutoCADa w C#. Po przerobieniu tutoriala przeniosłem rozrywkę na inny poziom. W pewnym momencie, korzystając z dostępnych źródeł, bawiłem się wstawianiem tabelki do rysunku. Bardziej – próbowałem wstawić tabelkę.
Kean Walmsley na swoim blogu podaje parę przepisów tabelkowych. Zacznijmy od tego, że utworzenie nowej tabelki wstawia ją z jednym wierszem i jedną kolumną. W związku z tym próba wpisania coś do nieistniejącej komórki (w dalszej kolumnie/wierszu) zaowocuje rzuceniem wyjątku.
Postępując więc zgodnie z radami Keana, postanowiłem nadać tabelce ilość kolumn i wierszy:
Table tb = new Table(); tb.NumRows = Y; tb.NumColumns = X;
Ledwo napisałem ten kod, VS podpowiedziało mi, że nie powinienem tego robić, szybkim warningiem:
‘Autodesk.AutoCAD.DatabaseServices.Table.NumRows’ is obsolete: ‘”Use Table.Rows.Count instead.”‘
‘Autodesk.AutoCAD.DatabaseServices.Table.NumColumns’ is obsolete: ‘”Use Table.Columns.Count instead.”‘
Co tu robić, zmieniamy:
tb.Rows.Count = Y; tb.Columns.Count = X;
Dobrze? ŹLE! Teraz VS już nie ostrzega – teraz rzuca błędem:
Property or indexer ‘Autodesk.AutoCAD.DatabaseServices.RowsCollection.Count’ cannot be assigned to — it is read only
Property or indexer ‘Autodesk.AutoCAD.DatabaseServices.ColumnsCollection.Count’ cannot be assigned to — it is read only
Może i sprawa nie zasługuje na osobny wpis, ale nie mam zamiaru się zrażać. Morał z tego taki, że nie należy ślepo ufać, że VS rozwiąże za nas wszystkie problemy. Chociaż rozwiąże wiele.
A na dokładkę powiem, że ten pierwszy, “przestarzały” kod działa absolutnie prawidłowo :)