簡體   English   中英

如何在C#中使表單的一部分部分透明?

[英]How can I make a part of the form partially transparent in C#?

我想使表單的一部分半透明,在該部分上的附加文本不透明。

我怎樣才能在C#中實現這一目標?

我不認為你可以將透明度(更正確地稱為“ 不透明度” )僅應用於表單的一部分而不是完整的整個表單。

但是,您可以非常輕松地創建自定義形狀(即非矩形),該形式的各個部分都是透明的。 根據您嘗試實現的確切“外觀”,這可能是您最接近的。

看看這些鏈接,以創建自己的自定義形狀:

在.NET中創建自定義形狀的Windows窗體
自定義形狀的表格,下拉C#
Visual Studio .NET中的異形Windows窗體和控件

唯一的另一種選擇可能是顯示兩種形式,其中一種形式設置為部分透明。 您必須以編程方式確保第二個表單緊鄰“主”表單放置,並在用戶移動/調整“主”表單時按比例移動/調整大小。 雖然這是兩種形式,但是可以向用戶說明它實際上只有一種形式,雖然這可能非常難以實現,並且不是一個完美的解決方案(但可能“足夠好”取決於根據您的確切需求)。

您可以通過在表單中​​創建一個完全透明的窗口,然后在完全透明的窗口上浮動半透明窗體來完成此操作。

首先,將主窗體的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));

這里唯一的問題是,如果用戶點擊半透明的“窗口”,第二個表單將獲得焦點,因此您的主表單的TitleBar將顯示為灰色。

單擊此處以在窗體上使用此半透明窗口運行示例應用程序。

簡單:

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

我不確定WinForms是否可以在沒有充分利用p / invoke調用和變通方法的情況下實現這一點。

您可能希望使用Windows Presentation Foundation(WPF),這樣的效果幾乎無法實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM