Z Buildera do Visual studio

0

Otóż mam pytanie dotyczące w sumie typów/klas w visual studio.
Przykładowo mam w Builderze:

TLabel *Label1

a w visual studio natomiast tak nie ma ... przynajmniej w ten sposob... szczerze to ciezko mi wywnioskowac jakiego typu sa dane kontrolki z zapisu calego kodu...

 private: System::Windows::Forms::Label^  label6;

To mi niewiele mowi tak naprawde...
Potrzebna mi ta wiedza do tego aby moc wypelniac niektore kontrolki za pomoca petli. W Builderze robilem to w ten sposob:

for (int i=100;i<120;i++)
{
 dynamic_cast<TLabel *>(FindComponent("Label" + (String)i))->Caption= "-";
} 

Jak sie sprawa ma w visual studio?

0

Przecież masz - typu Label z przestrzeni nazw System.Windows.Forms.

BTW, tutaj masz C++/CLI (czyli ogólnie C++ dla .NET), nie czysty C++.

Btw, to o co ci chodzi (FindComponent) to prawdopodobnie będzie do zastąpienia przez metodę Find() z kolekcji Controls, która należy do twojej formatki.

0
 private: System::Windows::Forms::Label^  label6;
  1. Ten język programowania nazywa się C++/CLI, jest to C++ w wersji dla .Net Framework. Problem na jaki zapewnie natrafisz jest taki, że większość przykładów dla .Net jest podawana w C# a nie C++.

  2. No private to private, chyba jasne.

  3. System::Windows::Forms::Label — tak środowisko generuje kod, dodając wszystkie namespace'y. Starczyłoby samo Label jeśli w kodzie się znajdzie using namespace System::Windows::Forms.

  4. Daszek… ach, daszek. To tzw. uchwyt. Składniowo coś jak gwiazdka, czyli zamiast TLabel* masz Label^. Główna różnica to taka, że obiekty z daszkiem tworzy się przez gcnew zamiast new i nie trzeba ich usuwać delete'em, bo podlegają garbage collectorowi.

  5. Odpowiednikiem FindComponent jest Controls->Find.

array<Control^> ^tab = this->Controls->Find(L"Label"+i.ToString(), false);

Jak widać zwraca tablicę kontrolek (specjalną tablicę typu cli::array), ale jak wiesz że jest tylko jedna o tej nazwie to po prostu używasz tab[0].

Czyli cos takiego (nie sprawdzałem czy się kompiluje):

for (int i=100;i<120;i++)
{
    safe_cast<Label^>(Controls->Find(L"Label" + i.ToString(), false)[0])->Text = L"-";
}

safe_cast jest jak dynamic_cast, ale sypie wyjątkiem zamiast zwracać nulla.

Lepiej jednak chyba trzymać w tablicy potrzebne kontrolki, niż ich tak szukać po nazwie. Dotyczy to zarówno Borlanda jak i Visuala.

BTW, tutaj masz C++/CLI (czyli ogólnie C++ dla .NET), nie czysty C++.
Akurat C++ Builder to również dość mocno nieczysty C++, więc tu wielkiej różnicy nie ma ;-)

0

No sprobowalem przedstawionej metody i faktycznie kompilacja zakonczyla sie pomyslnie z tym ze w wypadku gdy chce uzyc tej funkcji program sie wysypuje z takim oto bledem:
An unhandled exception of type 'System.IndexOutOfRangeException' occurred

Chyba zastosuje sie do rady i faktycznie bede trzymal wszystko w tablicy ... nie bede musial rzutowac ani bawic sie w takie rzeczy ... w przypadku buildera moglem dzieki temu zaoszczedzic troche kodu w malych programach z duzo iloscia kontrolek ale w tym wypadku widze ze jednak pewniej i bezpieczniej schowac wszystko do tablicy ... Czy jest jakis podrecznik do visual studio?

0

Odpisywałem ci już w tym Visual studio 2010 temacie. Tutaj masz całą dokumentacje i to z niej musisz korzystać pisząc. Zawiera masę przykładów. Po prostu musisz wiedzieć co chcesz zrobić i czego szukasz. Mając vs 2008 lub 2012 masz też intellisense (podpowiedzi) dzięki czemu bez problemu intuicyjnie piszesz większość rzeczy a szczególnie te dotyczące kontrolek. Możesz jeszcze zajrzeć w kwestii nauki tu http://msdn.microsoft.com/en-us/bb188199.aspx ale nie wiem czy coś ciekawego jest bo nigdy z tego nie korzystałem.

1
Azarien napisał(a):

BTW, tutaj masz C++/CLI (czyli ogólnie C++ dla .NET), nie czysty C++.
Akurat C++ Builder to również dość mocno nieczysty C++, więc tu wielkiej różnicy nie ma ;-)

A nie lepiej po prostu przejść na C#?
Pytam bo C++/CLI wydaje się jakimś cudakiem dla tych którym jest straszne przejście na inny język.
Ale w gruncie rzeczy zapisy w C++/CLI są tak różne od tego co jest w gołym C++ że może warto od razu wsiąść na C# ?

0

hm... chyba masz racje ;3
Tylko to niest wcale taka prosta sprawa
Potrzebna mi ksiazka a nie spis funkcji po angielsku

0

A nie lepiej po prostu przejść na C#?
Może lepiej, może nie lepiej - zależy od projektu. Jeśli jest przepisywany z Buildera na .Net, to pewnie mniej trudu wymaga zmiana frameworka niż przepisywanie wszystkiego od zera na inny język.

0

@MajQel Jedyna księgarnią/wydawnictwem w Polsce o której wiem, że wydaje i sprzedaje książki informatyczne to helion. Nie wiem czy tak ciężko jest wejść i zobaczyć sobie jakie są dostępne książki. Dziś zrobię to za Ciebie http://helion.pl/search?qa=&wsprzed=1&wprzyg=1&serwisyall=0&szukaj=visual+c%252B%252B Ale jak widzisz ludzie nie na tym forum nie kłamią i nie ma żadnej pozycji do nauki. Są tylko książki z praktycznymi przykładami poza tym, z tego co widzę jedyna która mógłbyś się zainteresować to ta dla visual 2005. Na rzeczy do których nikt nie potrzebuje podręczników takich rzeczy po prostu nie ma. Zajmij się angielskim a będzie dobrze. Osobiście sam mam duże problemy z tym językiem ale jednak z pomocą słownika daje rade to co mi potrzeba poza tym, mówię to jest strasznie intuicyjne.

0

ja nie mam problemow z angielskim. Mi chodzi o to, żeby ktoś polecił coś... ja wiem z doświadczenia, że tytuł tytułowi nierówny bo już wiele książek na temat html i php czytałem tak samo na temat c++. Ja potrafie szukac ... mi tylko chodzi o to żeby ktoś coś polecił co już czytał. C# jest dla mnie troche rpzerażające póki co w języku polskim chce coś co by było z przykładami. znalazłem kilka takowych tutoriali ... no ale ponoć kto pyta nie błądzi i mam nadzieje na jakieś lepsze .... z tego co wiem na yt nawet jest tutorial ale jakiś strasznie oporny on

1 użytkowników online, w tym zalogowanych: 0, gości: 1