2009-10-11 3 views

ответ

7

Я не думаю, что вы можете применить прозрачность (более правильно называть, Непрозрачность) только часть формы, а не полное, всей форме.

Вы можете, однако, создать пользовательскую форму (то есть непрямоугольную) довольно легко, причем различные части этой формы являются прозрачными. В зависимости от точного «взгляда», который вы пытаетесь достичь, это может быть ближе всего к вам.

Взгляните на эти ссылки для создания собственного-образную форму:

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

Единственной альтернативой может быть, чтобы отобразить две формы, одна из которых устанавливается быть частично прозрачным. Вы должны программно обеспечить, чтобы вторая форма располагалась сразу рядом с «основной» формой и пропорционально перемещалась/изменялась пропорционально, когда пользователь перемещает/изменяет размер «основной» формы. Хотя это две формы, можно сделать так, чтобы пользователю было видно, что на самом деле это только одна форма, хотя это может быть довольно сложно сделать, и не будет идеальным решением (но может быть «достаточно хорошим» в зависимости от по вашим конкретным потребностям).

0

Я не уверен, возможно ли это с помощью WinForms без использования p/invoke вызовов и обходных решений.

Вместо этого вы можете использовать Windows Presentation Foundation (WPF), где такие эффекты практически тривиальны для реализации.

+0

Почему -1? Что случилось с моим ответом? В WinForms вы можете устанавливать прозрачность только на полную форму, но не на части на ней, поэтому я сомневаюсь, что это можно сделать легко. – codymanix

+0

+1 для противодействия нисходящей линии. Это не так сложно сделать в WinForms, но он * слегка взломан, а WPF * лучше для такого рода вещей (хотя это менее интересно, когда инженеры MS делают все для вас). – MusiGenesis

+0

По крайней мере, ваш «менее забавный» аргумент можно считать очень спорным. – codymanix

0

Простой:

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

@FBSC - Это изменит непрозрачность всей формы. Похоже, исходный вопрос, который задает вопрос, только хочет изменить непрозрачность части формы, а не всей формы. – CraigTP

+0

Извините, я пропустил эту «часть»: S – FBSC

5

Вы можете сделать это, создав полностью прозрачное окно в вашей форме, а затем плавающее полупрозрачную форму над полностью прозрачным окном.

Во-первых, установите TransparencyKey вашей основной формы на Color.Red, затем поместите панель с именем panel1 на форму и установите ее BackColor в Red. Это создаст полностью прозрачное «окно». Создание формы ссылок на уровне формы, как это:

private Form _floater; 

Затем поместите этот код в событии Load вашей главной формы:

_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); 

Наконец, поместите этот код в событие Move вашей главной формы:

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

Единственная проблема заключается в том, что если пользователь нажимает на полупрозрачное «окно», вторая форма получит фокус, поэтому заголовок вашей основной формы будет выделен серым цветом.

Click here запустить образец приложения с этим полупрозрачным окном на форме.

Смежные вопросы