2009-10-11 6 views

Odpowiedz

7

Nie sądzę, można zastosować przezroczystość (bardziej poprawnie nazwać, Krycie) tylko część, a nie postaci kompletnej, całego formularza.

Można jednak dość łatwo utworzyć niestandardową formę kształtową (to jest nieprostokątną), przy czym różne części tej postaci są przezroczyste. W zależności od dokładnego "wyglądu", który próbujesz osiągnąć, może być najbliższy.

Spójrz na te linki do tworzenia własnych niestandardowych kształcie postać:

Creating Custom Shaped Windows Forms in .NET
Custom shaped form with a drop down in C#
Shaped Windows Forms and Controls in Visual Studio .NET

Jedyną alternatywą mogą być wyświetlane w dwóch formach, z których jedna jest ustawiona być częściowo przezroczyste. Musiałbyś programowo upewnić się, że drugi formularz jest umieszczony bezpośrednio obok "głównego" formularza i jest przesuwany/zmieniany proporcjonalnie, gdy użytkownik przesunie/zmieni rozmiar "głównego" formularza. Chociaż jest to dwie formy, można by zapytać użytkownika, że ​​w rzeczywistości jest to tylko jedna forma, chociaż może to być dość trudne do zrobienia i nie byłoby idealnym rozwiązaniem (ale może być "wystarczająco dobre" w zależności od według twoich potrzeb).

0

Nie jestem pewien, czy jest to możliwe nawet w przypadku WinForms bez wykorzystywania wywołań p/invoke i obejść.

Zamiast tego możesz użyć Windows Presentation Foundation (WPF), gdzie takie efekty są niemal banalne do zaimplementowania.

+0

Dlaczego -1? Co było nie tak z moją odpowiedzią? W WinForm można ustawić przezroczystość tylko w pełnym formularzu, ale nie w częściach, więc wątpię, by było to łatwe. – codymanix

+0

+1, aby przeciwdziałać spadkowi. To nie jest takie trudne w WinForms, ale * jest * nieco zhakowane i WPF * jest * lepszy dla tego rodzaju rzeczy (chociaż jest mniej zabawne, kiedy inżynierowie MS robią wszystko dla ciebie). – MusiGenesis

+0

Przynajmniej twoja "mniej zabawna" argumentacja może być uznana za bardzo kontrowersyjną. – codymanix

0

Proste:

myForm.Opacity = 80; // Change 80 with your value 
+2

@FBSC - To zmieni nieprzezroczystość całego formularza. Wygląda na to, że pierwotny pytający pytający chce zmienić nieprzezroczystość części formularza, a nie całej formy. – CraigTP

+0

Przepraszam, pominąłem tę "część": S – FBSC

5

Można to zrobić, tworząc całkowicie przezroczyste okno w formularzu, a następnie przestawiając półprzezroczysty formularz na całkowicie przezroczyste okno.

Najpierw ustaw kursor na formularzu głównym na Color.Red, a następnie umieść panel o nazwie panel1 w formularzu i ustaw jego kolor BackColor na czerwony. Spowoduje to utworzenie w pełni przezroczystego "okna". Utworzyć odwołanie Form forma poziomu takiego:

private Form _floater; 

Następnie umieścić ten kod w przypadku obciążenia głównego formularza:

_floater = new Form(); 
_floater.ShowInTaskbar = false; 
_floater.FormBorderStyle = FormBorderStyle.None; 
_floater.Opacity = .5; 
_floater.Size = panel1.Size; 
_floater.StartPosition = FormStartPosition.Manual; 
_floater.Location = panel1.PointToScreen(new Point(0, 0)); 
_floater.Show(this); 

Wreszcie umieścić ten kod w przypadku Move głównego formularza:

_floater.Location = panel1.PointToScreen(new Point(0, 0)); 

Jedynym problemem jest to, że jeśli użytkownik kliknie w półprzezroczyste "okno", drugi formularz będzie fokusować, więc tytuł główny w formularzu jest wyszarzony.

Click here do uruchomienia przykładowej aplikacji z tym półprzezroczystym oknem na formularzu.