C# VSTO中的透明控件
我正在尝试使用vsto将一些windows窗体控件添加到工作表中。我希望它们是透明的(这样Excel中的实际内容是可见的) 我的winforms用户控件构造函数如下所示:C# VSTO中的透明控件,c#,vsto,C#,Vsto,我正在尝试使用vsto将一些windows窗体控件添加到工作表中。我希望它们是透明的(这样Excel中的实际内容是可见的) 我的winforms用户控件构造函数如下所示: public Tag() { InitializeComponent(); this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); BackColor = Color.Transparent
public Tag()
{
InitializeComponent();
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
BackColor = Color.Transparent;
}
void Application_WorkbookOpen(Excel.Workbook Wb)
{
var nativeSheet = Wb.ActiveSheet as Excel.Worksheet;
if (nativeSheet != null)
{
var tag = new Tag();
var vstoSheet = nativeSheet.GetVstoObject();
var range = nativeSheet.Range["A1", missing];
vstoSheet.Controls.AddControl(tag, range, Guid.NewGuid().ToString());
}
}
我添加了如下控件:
public Tag()
{
InitializeComponent();
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
BackColor = Color.Transparent;
}
void Application_WorkbookOpen(Excel.Workbook Wb)
{
var nativeSheet = Wb.ActiveSheet as Excel.Worksheet;
if (nativeSheet != null)
{
var tag = new Tag();
var vstoSheet = nativeSheet.GetVstoObject();
var range = nativeSheet.Range["A1", missing];
vstoSheet.Controls.AddControl(tag, range, Guid.NewGuid().ToString());
}
}
如果有一些内容单元格A1,它将被控件覆盖(单元格将显示为纯白色)
有人对此有什么想法吗?如MSDN中所述: 当Windows窗体控件托管在Office文档上时,该控件 未直接嵌入到文档中。一个名为 Windows窗体控件主机首先添加到文档表面,然后 控件主机充当添加的每个Windows窗体控件的主机 文件也是如此 你可以自己看看:
var btn = new ImageButton();
btn.Name = "link1";
btn.Text = controlText;
btn.Click += new EventHandler(btn_Click);
vstoWorksheet.Controls.AddControl(pic, nativeWorksheet.Range[address], controlText);
public class ImageButton : Control, IButtonControl
{
public ImageButton()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
SetStyle(ControlStyles.ResizeRedraw, true);
this.BackColor = Color.Transparent;
}
protected override void OnPaint(PaintEventArgs pevent)
{
Graphics g = pevent.Graphics;
g.DrawRectangle(Pens.Black, this.ClientRectangle);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// don't call the base class
//base.OnPaintBackground(pevent);
}
protected override CreateParams CreateParams
{
get
{
const int WS_EX_TRANSPARENT = 0x20;
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_TRANSPARENT;
return cp;
}
}
// rest of class here...
}
+1,但是一些微软的人。。。