Przyszła pora wrócić do tematu aplikacji wielojęzycznych. Tym razem skupię się na WinForms. Zacznę od tego, że część rzeczy, o których pisałem we wcześniejszym poście na temat aplikacji ASP.NET można zastosować do innych technologii, w szczególności do WinForms. Dla przypomnienia: Jeśli chcemy aby nasza aplikacja miała wiele wersji językowych to przygotowujmy się do tego od pierwszej linijki tej aplikacji.Stałe znakowe w kodzie są złe, bardzo złe, niewyobrażalnie złe... Stałe zawierając...
Strona głównaUżytkownik
Paweł Łukasik | użytkownik
20maj/110Zaginiona metoda Main()? Tworząc aplikację WPF czasami zachodzi potrzeba napisania własnej metody Main(). Przeglądając pliki znajdujące się w solucji można natknąć się pliki *.xaml i powiązanie z nimi *.xaml.cs oraz pliki kodu *.cs. Dopóki nie trzeba zrobić czegoś nie standardowego to często nie ma potrzeby, aby zagłębiać się w różnego rodzaju mechanizmy. Takim mechanizmem może być start aplikacji WPF. Ostatnio potrzebowałem dodać własną metodę Main(). Sądziłem, że będzie to proste – nowa klasa ...
W świecie projektów .Netowych dość często spotykam się z sytuacją, gdzie intensywnie używane jest Visual Studio, natomiast rola TFS ogranicza się jedynie do kontroli wersji. Co prawda od czasu do czasu ktoś stworzy Taska lub Buga, w porywach nawet dołączy do niego związany kod, jednak nie ma to wiele wspólnego z ogólnie obowiązujacym procesem (inna sprawa czy w ogóle obowiązuje jakiś proces :)). A jednak nazwa Team Foundation Server wskazuje na pewien zakres odpowie...
Ostatnimi czasy zajmowałem się przygotowanie obcojęzycznej wersji systemu, na który składa się cała plejada aplikacji napisanych w różnych technologiach, od ASP.NET przez WinForms po WPF. Do tej pory zagadnienie to znałem przede wszystkim ze strony teoretycznej. To znaczy wiedziałem o różnych mechanizmach wbudowanych w .NET wspierających ten proces, nie omieszkałem ich wypróbować ale nie miałem okazji zastosować tej wiedzy do dużego i skomplikowanego systemu. Powiem więcej, proces lo...
Dziś kilka słów o tym, czego możemy spodziewać się po .NET jeśli idzie o niektóre możliwości systemu plików. - Panie Michale, to JEDNYM słowem, jak to jest z tym wsparciem dla niektórych rzadziej używanych funkcji systemu plików w .NET? - Dobrze. - A dwoma słowami? - Nie dobrze. Nudne wprowadzenie Wszystkie programy .NET są jednocześnie aplikacjami Win32, co oznacza, że pracują w ramach podsystemu Windows, który realizowany jest przez proces csrss.exe. Jego nazwa rozwija się do Client/Server Run-Time...
Z lekkim opóźnieniem wracamy do cyklu poznawania Team Foundation Servera :) Zgodnie z prośbą Andrzeja, dzisiaj kilka słów na temat samej instalacji. Nie chciałbym się jednak powtarzać z publikowanymi przeze mnie już wcześniej materiałami, dlatego najpierw odsyłam Cię, drogi Czytelniku do...
Dzisiaj trochę kodu źródłowego z mojego ostatniego projektu. Przy okazji szlifowania projektu i tworzenia AboutWindow pomyślałem, że fajnie byłoby mieć gotowy mechanizm do szybkiego, łatwego i jednoznacznego numerowania wersji projektu i wiązania tej wersji z rewizją w systemie kontroli wersji (Mercurial). Prawidłowe podpisywanie projektu numerem wersji, który pozwala w prosty sposób zidentyfikować, z której wersji kodu (rewizji) została skompilowana dana we...
Emulator Windows Phone 7 ma dość banalny, ale idiotyczny błąd, który o dziwo nie został wykryty przed wypuszczeniem na rynek Visual Studio 2010 Express for Windows Phone. Otóż zdarzenie TextChanged w kontrolce TextBox wywoływane jest dwukrotnie dla każdego przyciśnięcia klawisza. Irytujące, nieprawdaż? Problem wynika z faktu, że kontrolka TextBox zawiera w sobie drugi TextBox, który jest wykorzystywany dla stanu readonly/disabled – stąd podwójne wywołanie! Nie posiadam obecnie telefo...
Silverlight 5005 dni, 20 godzin, 18 minut temu 89 źrodło rozwiń
Niedawno, przy okazji rozmyślania nad konstrukcją interfejsu użytkownika dla narzędzia tworzonego dla własnych potrzeb, przypomniał mi się pewien projekt, nad którym miałem okazję pracować. Projekt nie był wielki, ale naszpikowany ciekawymi rozwiązaniami, m.in. LINQ (zarówno dla bazy danych jak i LINQ to XML), SQL Server Compact Edition, przetwarzanie bardzo sporych XMLi. Było również jedno rozwiązanie, które szczególnie zapadło mi w pamięci – kontrolka do edycji danych obiektów, co ciekawe – dla wszystk...
Dzisiaj historia z życia wzięta – czyli ponad dzień pracy programisty. Akcja będzie wartka, a potencjalnemu czytelnikowi zalecam wczytanie do pamięci RAM wewnątrz głów dll’ek z zasobami o WPF’ie. Zaczęło się niewinnie, przyszło zgłoszenie od testerów, że aplikacja zajmuje strasznie dużo pamięci, a przy wykonywaniu pewnej operacji ta zajętość jeszcze rośnie i wielce nazywać to chcieli memory leakiem. Jako programista raczej nie dowierzałem, przecież w dot-necie tak być nie może, zgodnie z teorią pamięć sa...
Zastanawiałem się w jaki sposób mógł bym sprawić żeby mój projekt odwołujący się do kilku bibliotek zewnętrznych nie był zbieraniną plików a jednym wygodnym do użycia plikiem. Głównym motywatorem takiego działania jest fakt że to aplikacji przeznaczona do pracy z linii poleceń.
Pisać testy jednostkowe do wszystkiego? Celować w 100% unit-test-code-coverage? Stosować TDD dla każdego rodzaju kodu? Na te pytania bardzo łatwo znaleźć w internecie odpowiedź i brzmi ona: TAK. Niestety nie jest to odpowiedź prawidłowa. Czasem lepiej testu nie napisać, niż go napisać. Czasem lepiej test skasować, niż go po raz dziesiąty poprawiać po zmianie w kodzie.
Czasem przeglądając kod .NET Framework, czy to bezpośrednio w Visual Studio, czy też za pomocą Reflectora (ponownie darmowego ;)), ILSpy, tudzież innych narzędzi do dezasemblacji kodu natrafiamy na kawałek kodu opatrzony atrybutem MethodImpl, np. (dla przykładu System.Object): [MethodImpl(MethodImplOptions.InternalCall)] internalstaticexternint InternalGetHashCode(object obj); I na tym przeglądanie kodu się kończy, a przecież tyle ciekawych rzeczy jest jeszcze do rozpoznania! Lecz gdzie tego szukać?! Zg...
W poprzedniej notce pisałem o implementacji lock’a i do zilustrowania pewnych szczegółów użyłem metody GetHashCode analizowanego obiektu. Tym razem przyjrzymy się bliżej samej metodzie GetHashCode, dziedziczonej przez wszystkie klasy z bazowej klasy Object i często traktowanej po macoszemu, lub też bez właściwego zrozumienia. Niestety potrafi się to zemścić, a w jaki sposób, to spróbuję za chwilę zademonstrować, po czym postaram się podać kilka rad co z tym fantem począć. O tym, że metoda GetHashCode jes...
Ostatnio natknąłem się na sytuację, która miejsca mieć nie powinna... a mimo to zdarza się w każdym chyba projekcie dość regularnie. Otóż podczas klikania po aplikacji w przypadkowym teście okazało się, że jedna z podstawowych funkcjonalności nie działa. Nie wykonywał się POST jakiejś prostej formy. Dziw nad dziwy... kod wyglądał OK, przejrzenie ostatnich commitów nie wykazało żadnych kluczowych zmian, a mimo to - nie działa. Nieocenionym wręcz narzędziem do znajdowania przyczyn takich wypadków jest kom...
We wcześniejszych wpisach pojawiły się informacje na temat kompilacji assembly na różne platformy oraz narzędzi, które pozwalają sprawdzić na jaką platformę assembly zostało skompilowane. W tym wpisie znajdą się informacje jak to można zrobić z poziomu kodu źródłowego. Sprawdzenie podczas działania Aby sprawdzić podczas działania programu/procedury, to czy jest on/ona uruchomiona w kontekście 32, czy 64-bitowym w czasach przed .NET 4.0 należało posłużyć się pewnym trick'iem, a mianowicie (tak jak już to...
W poprzednim wpisie pojawiły się informacje na temat sposobów skompilowania assembly, tak by działała jako kod 64 lub 32 –bitowy. W tym wpisie znajdą się informacje na temat tego jak można sprawdzić, na jaką platformę zostało skompilowane assembly (czyli znajdą się tu m.in. informacje na temat narzędzia CorFlags, IL Disassembler'a).CorFlagsNarzędzie CorFlags.exe(NET CorFlags Conversion Tool) pozwala na sprawdzenie lub konfiguracje wykonywalnego assembly, tak by było one traktowane jako 64 lub 32 – bito...
Jeżeli w MVC 3 (nie wiem jak w wcześniejszych wersjach), chcecie po operacji submit formularza zaktualizować jakąś wartość w waszym modelu to niezależnie jak byście się wysilali nie uda się wam to. Są dwa wyjścia z sytuacji (przynajmniej mi znane): Wyczyszczenie całego stanu modelu za pomocą metody ModelState.Clear() – wymaga to jednak następnie uzupełnienia wszystkich pól modelu – odświeża to cały model; Wyczyszczenie pojedynczej wartości za pomocą metody ModelState.SetModelValue.
W 64-bitowych systemach Windows mogą działać aplikacje skomplikowane na platformę 64-bitową, jak też w trybie symulacji 32-bitowe (skompilowane na platformę x86, ale ... aplikacja 64-bitowa może korzystać tylko z 64-bitowych komponentów (np. bibliotek), a aplikacja 32-bitowa może korzystać tylko z 32-bitowych komponentów. Do tego na platformie .NET dochodzi jeszcze kompilacja typu „Any CPU”, co w konsekwencji może spowodować nie małe zamieszanie.... Przyjrzyjmy się może tym zagadnieniom. W niniejszych ro...
WPF: Bindowanie Enum'a do ComboBox'akwi 112011 Podczas moich ostatnich zmagań z WPFem trafiłem na ciekawy problem. Chodzi o bindowanie typu Enum do kontrolki ComboBox. Czyli w combo ma pojawiać się lista dostępnych wartości enum'a, a po wybraniu jednej z nich ma uaktualnić się podpięta do comboboxa właściowość ViewModelu. Dodatkowo sprawa komplikuje się gdy nazwy poszczególnych wartości enum'a są niezbyt czytelne dla śmiertelnego użytkownika programu (np. zamiast ładnej opisowej nazwy "To jest pierwsza s...