Ciekawostki

Visual Studio IntelliSense Tip

Okazuje się, że IntelliSense w Visual Studio 2010 potrafi nie tylko uzupełniać wpisywane przez nas metody, lecz dodatkowo interpretować to co wpisujemy. Przykładem niech będzie klasa Console.

Standardowo

Przeważnie gdy piszemy kod, w którym chcemy wczytać pewne dane od użytkownika wpisujemy Console.Read… i wybieramy z listy podpowiedzi ReadLinie. Okazuje się, że można do tego podejść inaczej!

Podejście 1

Zamiast wpisywać po kropce słowo Read wpiszmy Line. Okazuje się, że IntelliSense zasugeruje nam metody zawierające w sobie słowo Line czyli ReadLine i WriteLine. Jest to nieznacznie szybsze niż korzystanie z prefiksu Write.

Podejście 2

Ale to nie wszystko! Można jeszcze szybciej dostać się do interesującej nas metody, czyli do ReadLine. Wystarczy po kropce wpisać dwie litery: RL. IntelliSense zinterpretuje to jako poszukiwanie metody, która składa się z conajmniej dwóch wyrazów, z których pierwszy zaczyna się na R, a drugi na L.

Istotna jest tu wielkość liter, gdyż dla algorytmu używanego przez IntelliSense ma ona znaczenie – łatwo to sprawdzić wpisując zamiast RL ciąg rL.


Problem 260 znaków

Problem 260 znaków

Przy okazji robienia projektu na potrzeby artykułu okazało się, ze Visual Studio przy buildowaniu wyników mojej pracy zwróciło błąd:

Could not write lines to file “……”. The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.

Z racji na fakt, że było to związane z pracą przy projekcie dla Windows Phone pierwszym co przyszło mi do głowy to fakt, że być może emulator nie jest w stanie poradzić sobie z tak długimi ścieżkami do plików. W związku z tym szybki test wla standardowego projektu i … wynik ten sam.

Okazuje się, że dotarłem do granicy, której wcześniej nie zdażyło mi się osiągnąć. Próbowałem sobie przypomnieć, czy być może spotkałem się z takim błędem wcześniej, lecz nic nie przychodziło mi do głowy. Pomimo tworzenia projektów w katalogu X:\Work\ okazało się, że moje nieustanne ich porządkowanie (względem rodzaju technologii, przeznaczenia, przydatności itp) przerosło możliwości systemu i Visual Studio – głównym winowajcą jest tu system, którego ograniczenia co do długości ścieżek są opisane tutaj.

Wniosek

Nałogowe porządkowanie katalogów i plików może doprowadzić do problemu zbytniej normalizacji, który jak w przypadku baz danych prowadzi do ponownej i zamierzonej denormalizacji.


Ctrl + T w Visual Studio

Przed chwilą natrafiłem na dość dziwny skrót dostępny w Visual Studio, a mianowicie na kombinację klawiszy Ctrl + T. Skrót ten jest znany z przeglądarek internetowych do otwierania nowej zakładki, lecz nie wiedziałem, że istnieje taki również w VS. Natrafiłem na niego zupełnie przypadkowo, gdyż przełączając się między oknami przerwałem o jedno okno za wcześnie (zamiast przeglądarki było to właśnie Visual Studio). Ctrl + T i nic się nie dzieje. Ok, przełączyłem się dalej, ale gdy wróciłem do VS okazało się, że mój plik konfiguracyjny się rozsypał. po chwili poszukiwań znalazłem w nim czeski błąd. Dziwne, bo nic w nim nie zmieniałem i ot tak sobie się pojawił? Otóż nie! skrót klawiaturowy Ctrl + T powoduje zamianę dwóch sąsiednich znaków znajdujących się przy kursorze! Co więcej jeżeli postawimy kursor gdzieś w środku słowa i wykonamy kilka tych kombinacji pod rząd wówczas litera po lewej stronie kursora wyląduje na końcu słowa. Pytanie – W JAKIM CELU? Nie mam pojęcia czy ktoś z tego korzysta i jaki jest sens tworzenia takiego skrótu klawiaturowego. No chyba, że ktoś namiętnie robi literówki, ale wówczas można użyć Backspace i poprawić zamiast przypominać sobie, że taka właśnie kombinacja klawiszy istnieje.

Tak czy inaczej – człowiek całe życie się uczy a mój wniosek – strzeż się Ctrl + T w Visual Studio – szczególnie w plikach konfiguracyjnych :) (w kodzie nie ma takiego problemu, bo od razu dostaniemy informację o błędzie, jednakże z w *.config może być problem)


Pytanie – rozwiązanie [7] – WP7 jak rozpoznać Theme

Aby aplikacje tworzone na platformie Windows Phone 7 dawały użytkownikowi jeszcze większy komfort korzystania warto dostosować UI do aktualnych ustawień telefonu. Możemy to osiągnąć między innymi rozpoznając wybrany przez niego motyw (theme).  W tym celu korzystamy z prostego enuma oraz metody widocznej na poniższym listingu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public enum Theme
{
	Light,
	Dark
}
 
public static Theme PhoneTheme
{
	get
	{
		if (Application.Current.Resources["PhoneBackgroundColor"].ToString() == "#FF000000")
			return Theme.Dark;
		else
			return Theme.Light;
	}
}

Pytanie – rozwiązanie [6] – jak odwrócić string

Przy okazji przygotowywania testowego serwisu na 2nd Silesian Code Camp zastanawiałem się jak najwygodniej odwrócić łańcuch znaków (string). Poza oczywistym rozwiązaniem wykorzystującym odwracanie tablicy w pętli, w oko wpadł mi następujący kawałek kodu, który w przejrzysty sposób rozwiązuje to zadanie:

1
2
3
4
5
6
public string Reverse(string str)
{
	char[] charArray = str.ToCharArray(); 
	Array.Reverse(charArray);
	return new string(charArray);
}

Pytanie – rozwiązanie [5] Unable to launch asp.net development server because port is in use

Podczas pracy z Visual Studio i aplikacjami hostowanymi przez serwer www możemy natrafić na błąd o następującej treści:

Unable to launch asp.net development server because port is in use“.

Nie pomaga tu niestety modyfikacja portu we właściwościach projektu itp. Rozwiązaniem przyczyny na 90% jest fakt, że posiadasz zainstalowany pakiet antywirusowy ESET NOD, który to niestety blokuje możliwość uruchomienia wbudowanego w VS serwera.
Rozwiązanie problemu jest nastepujące: W opcjach przechodzimy do sekcji

PL:
Ustawienia zaawansowane => Antywirus i antyspyware => Ochrona dostępu do stron internetowych => Protokoły HTTP i HTTPS => Przeglądarki internetowe.

EN:
Advanced firewall setup => Antivirus & anti spyware => Web access protection => HTTP => Webbrowsers

Na liście odszukujemy Visual Studio i odznaczamy checkbox (nie chcemy aby filtrowanie było włączone). Po zapisaniu ustawień NOD’a możemy uruchomić debugowanie.

Jeżeli jesteś w pozostałych 10% – niestety musisz szukać dalej.


Pytanie – rozwiązanie [4] MVC – jak szybko przejść z widoku do kontrolera

Podczas pracy z projektem MVC i edycji widoku mamy czasem potrzebę szybko przenieść się do klasy kontrolera. Aby to zrobić wystarczy na oknie widoku otworzyć menu kontekstowe i wybrać opcję “Go To Controller” jak na poniższym obrazku.

Go To Controller


Pytanie – rozwiązanie [3] – znikająca solucja w Solution Explorer

Gdy w Visual Studio 2008 tworzymy nową solucję, w której skład wchodzi jeden projekt domyślnym zachowaniem VS jest ukrycie jej w Solution Explorerze. Czy jest to problem? Tak, gdy chcemy dodać do solucji kolejny projekt… Można to obejść dodając do pustej solucji “Solution Folder”, a następnie dodawać kolejne projekty. Istnieje jednak prostsze rozwiązanie. Wystarczy wejść do menu:

Tools -> Options -> Projects and Solutions i zaznaczyć opcję “Always show solution“.

Na szczęście problem ten nie dotyczy Visual Studio 2010, gdyż opcja ta jest domyślnie zaznaczona :)


Pytanie – rozwiązanie [2] WPF – przesuwanie okna z WindowState=None

W poprzednim poście z serii “Pytanie – rozwiązanie” pisałem jak można usunąć obramowanie i domyślny pasek okna. Niestety powoduje to pewien problem dotyczący przesuwania tak zdefiniowanego okna po ekranie. Szukając po sieci znalazłem rozwiązania sięgające do PInvoke i wysyłania sygnałów do okna. Całość niestety zajmowała ładnych kilkadziesiąt linii kodu. Okazuje się jednak, że jest rozwiązanie mieszczące się w dosłownie jednej linijce! Odpowiedź na pytanie “Jak przesuwać okno z ustawionym WindowState=None” składa się z trzech elementów:

a) Do okna dodajemy sobie element, który będzie odpowiedzialny za możliwość przesuwania okna
b) dodajemy do niego obsługę zdarzenia “MouseLeftButtonDown
c) we wnętrzu metody wpisujemy jedną linijkę:
DragMove();

Teraz bez najmniejszych problemów umożliwimy użytkownikowi manipulację naszym oknem nawet gdy nie ma ono górnego paska.


Pytanie – rozwiązanie [1] WPF – okno bez obramowania

Postanowiłem zacząć umieszczać na blogu krótkie posty na zasadzie pytania i rozwiązania, które napotykałem podczas pisania różnych projektów.

Na początek coś prostego, ale umknęło mi to z pamięci i musiałem przeszukać właściwości okna, bo coś kojarzyłem, ale nie pamiętałem nazwy :) Odpowiedź na pytanie “Jak usunąć obramowanie okna w WPF?”  jest następująca:

We właściwościach okna ustaw WindowState=None

Dlaczego takie coś robić? Przykładem może być aplikacja, która ma wyglądać inaczej niż standardowe okienko. Zamiast tła ma ustawiony obrazek z przezroczystością. Można dzięki temu uzyskać bardzo ciekawy design, jednakże bez ustawienia WindowState=None cały efekt będzie zepsuty przez domyślny pasek okna i jego obramowanie.


  • O mnie

    Maciej Grabek

    Moje profile na:

    MVP

    Codeguru.pl GoldenLine
    Twitter CodeProject

  • english version
  • Polecam

  • Copyright © Maciej Grabek. All rights reserved.
    Powered by WordPress
    %d bloggers like this: