如何设置Panel透明

wanggong126 2010-04-09 10:32:28
这个问题很苦恼,就是父窗体有一个Panel,Panel里面添加的是一个子窗体。
我现在想移动子窗体时 把Panel最大化覆盖整个父窗体,设置Panel为透明。
不要告诉我
panel.BackColor = Color.FromArgb(65, 204, 212, 230);
或者Transparent
抑或
 private void pnlNavigate_Paint(object sender, PaintEventArgs e)
{
base.OnPaint(e);

// 背景设成透明还是必要的,控件上的图形在后面画
pnlNavigate.BackColor = Color.Transparent;
Rectangle rect = e.ClipRectangle;
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

// 画控件上的图形,这里以一个线性渐变的图为例。
// 注意此处,128是透明度,范围是0-255。
// 如果控件上放一个不透明的图片,则须先将其处理为透明的。
LinearGradientBrush baseBackground = new LinearGradientBrush(rect,
Color.FromArgb(128, 191, 191, 191),
Color.FromArgb(128, 255, 255, 255),
270, false);

e.Graphics.FillRectangle(baseBackground, rect);
e.Graphics.Flush();
}

这些对我都无效
...全文
1568 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng20068 2011-06-08
  • 打赏
  • 举报
回复
(⊙o⊙)…
Code従業員 2010-04-09
  • 打赏
  • 举报
回复
在NEW 子窗体的时候,设置他的父级,那子窗体就出不去的。
Code従業員 2010-04-09
  • 打赏
  • 举报
回复
你不是要做主从窗体效果吧?这样行不?

父窗体.IsMdiContainer = true;
Code従業員 2010-04-09
  • 打赏
  • 举报
回复
咋个透明法?你是说Panel做挡板,看的到下面的控件,还是Panel那块透明了,可以看到桌面?

“Panel里面添加的是一个子窗体”咋个加法?窗体NEW出来,你要放到Panel里面?

加到里面还移动?
wanggong126 2010-04-09
  • 打赏
  • 举报
回复
/// <summary>
/// 设置透明
/// </summary>
public void SetOpacity()
{
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent;
}

这样? 我试过的 好像跟原来没有变化
指间的风 2010-04-09
  • 打赏
  • 举报
回复
有样式可以控制吧,Panel的样式可以像div一样去控制。
wanggong126 2010-04-09
  • 打赏
  • 举报
回复
1楼 好好看看我发的帖子!你的方法我早试过!不可能成功的
wanggong126 2010-04-09
  • 打赏
  • 举报
回复
/// <summary>
/// 失去鼠标或者获得鼠标
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CarApplyMain_MouseCaptureChanged(object sender, EventArgs e)
{
C9.Win.UI.ccPanel ccPanel = this.Parent as C9.Win.UI.ccPanel;
ccPanel.Size = ccPanel.Parent.Size;

Point p = new Point(0, 0);
Point pPanel = ccPanel.Location;
ccPanel.SetOpacity();
ccPanel.Location = p;

this.Location = pPanel;

isMove = false;
}

/// <summary>
/// 窗体焦点移除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CarApplyMain_LocationChanged(object sender, EventArgs e)
{
Point p = new Point(0, 0);

if (this.Location != p && !isMove)
{
C9.Win.UI.ccPanel ccPanel = this.Parent as C9.Win.UI.ccPanel;
ccPanel.Size = this.Size;

// 获取移动后Panel应该显示的坐标
// pt = GetPointAsParent(this, ccPanel);

// 重新设置 窗体和其父容器的位置
ccPanel.Dock = System.Windows.Forms.DockStyle.None;
ccPanel.Location = this.Location;

isMove = true;
this.Location = p;
}
}

我主要是为了 在移动子窗体时,把Panel的大小设置成父窗体的大小(否则子窗体只能在很小的范围内移动)
同时想把Panel设置成透明的 模拟子窗体在父窗体内移动! 最后算坐标 重置大小而已
wanggong126 2010-04-09
  • 打赏
  • 举报
回复
/// <summary>
/// 显示摘要单据窗体
/// </summary>
/// <param name="carApplyMain"></param>
public void ShowPanel(CarApplyMain frm)
{
carApplyMain = frm;
if (ccPanel.Controls.Count>0)
{
for (int i = 0; i < ccPanel.Controls.Count; i++)
{
ccPanel.Controls.RemoveAt(i);
}
}
ccPanel.Controls.Add(carApplyMain);

carApplyMain.Cursor = System.Windows.Forms.Cursors.Default;


if (carApplyMain == null || carApplyMain.IsDisposed)
{
carApplyMain = new CarApplyMain();
carApplyMain.Show();
}
else
{
carApplyMain.WindowState = FormWindowState.Normal;
carApplyMain.Activate();
carApplyMain.Show();
}
carApplyMain.MoveBill(MoveForwardEnum.Next);

ccPanel.Size = new System.Drawing.Size(carApplyMain.Size.Width, carApplyMain.Size.Height);
//carApplyMain.Dock = System.Windows.Forms.DockStyle.Fill;
SetLocation();
this.ccPanel.Visible = true;
}
swzzf1314 2010-04-09
  • 打赏
  • 举报
回复
用用户控件吧,加到panel.Controls里吧
FiredFish 2010-04-09
  • 打赏
  • 举报
回复
你怎么往panel里面添加子窗体?

你说的是自己建立的User Control吧?
hanchao_5168 2010-04-09
  • 打赏
  • 举报
回复
给分吧
BackColor 设成 Transparent
lpingz 2010-04-09
  • 打赏
  • 举报
回复
关注下。。。
wanggong126 2010-04-09
  • 打赏
  • 举报
回复
transparent? 我试过怎么不行啊?
其实 我只是要这个子窗体只能在父窗体里面显示,出了父窗体或者切换窗体后就看不了!
就是它的操作范围只能是在它父窗体
也不一定非要用Panel,用Panel只是为了让子窗体不出父窗体而已 包含在父窗体里面
因为父窗体.Controls.Add(子窗体);
子窗体.Show();

显示好像是出不来的
zs82891879 2010-04-09
  • 打赏
  • 举报
回复
Panel就相当于DIV
background:none或background:transparent
kkka1 2010-04-09
  • 打赏
  • 举报
回复
kkka1 2010-04-09
  • 打赏
  • 举报
回复
不大清楚你的意思,
不过可以提醒你一下注意两个属性:
opacity 控制窗体的透明程度
toplevel 可以把子窗体放在像panel一样的容器里
wanggong126 2010-04-09
  • 打赏
  • 举报
回复
我其实就是想子窗体能够在它的父窗体那么大的空间内移动! 所以才会把Panel的Size设置的和父窗体的大小一样 否则只能在很小的范围内拖动!
我还想过把子窗体作为控件加入到父窗体内容 可是子窗体都没法显示了!
我感觉这个功能不好弄哦
wanggong126 2010-04-09
  • 打赏
  • 举报
回复
呵呵 MDI我也想 可是不行!我的窗体不能设置成MDI的父窗体,因为它也是其他窗体的部分,套用多选项卡的!没法子设置TopLevel=true

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧