请教一个C#转vb.net 的问题。求助大神

dangyj 2015-02-15 10:02:12
网上一个窗体四周阴影的例子当中, SkinForm当中构造函数代码为:

partial class SkinForm : Form
{
//控件层
private SkinMain Main;
//带参构造
public SkinForm(SkinMain main)
{
InitializeComponent();
//将控制层传值过来
this.Main = main;
//减少闪烁
SetStyles();
//初始化
Init();
}
#region 初始化
private void Init()
{
//最顶层
TopMost = Main.TopMost;
//是否在任务栏显示
ShowInTaskbar = Main.SkinShowInTaskbar;
//无边框模式
FormBorderStyle = FormBorderStyle.None;
//自动拉伸背景图以适应窗口
BackgroundImageLayout = ImageLayout.Stretch;
//还原任务栏右键菜单
CommonClass.SetTaskMenu(this);
//设置绘图层显示位置
this.Location = new Point(Main.Location.X - Main.MainPosition.X, Main.Location.Y - Main.MainPosition.Y);
//设置ICO
Icon = Main.Icon;
//是否显示ICO
ShowIcon = Main.ShowIcon;
//设置大小
Size = Main.SkinSize;
//设置标题名
Text = Main.Text;
//设置背景
Bitmap bitmaps = new Bitmap(Main.SkinBack, Size);
if (Main.SkinTrankColor != Color.Transparent)
{
bitmaps.MakeTransparent(Main.SkinTrankColor);
}
BackgroundImage = bitmaps;
//控制层与绘图层合为一体
Main.TransparencyKey = Main.SkinWhetherTank ? Color.Empty : Main.BackColor;
Main.Owner = this;
//绘制层窗体移动
this.MouseDown += new MouseEventHandler(Frm_MouseDown);
this.MouseMove += new MouseEventHandler(Frm_MouseMove);
this.MouseUp += new MouseEventHandler(Frm_MouseUp);
this.LocationChanged += new EventHandler(Frm_LocationChanged);
//控制层层窗体移动
Main.MouseDown += new MouseEventHandler(Frm_MouseDown);
Main.MouseMove += new MouseEventHandler(Frm_MouseMove);
Main.MouseUp += new MouseEventHandler(Frm_MouseUp);
Main.LocationChanged += new EventHandler(Frm_LocationChanged);
}
#endregion

而SkinMain中的构造函数为:
public partial class SkinMain : Form
{
//绘制层
private SkinForm skin;
public SkinMain()
{
InitializeComponent();
//减少闪烁
SetStyles();
//初始化
Init();
}
#region 初始化
private void Init()
{
//不显示在Windows任务栏中
ShowInTaskbar = false;
}
#endregion

SkinMain中用于显示阴影的代码:
Protected Overrides Sub OnVisibleChanged(e As EventArgs)
MyBase.OnVisibleChanged(e)
If Visible Then
If Not DesignMode Then
DWin32.AnimateWindow(Me.Handle, 150, DWin32.AW_BLEND Or DWin32.AW_ACTIVATE)
ElseIf Not DesignMode AndAlso ds Is Nothing Then
ds = New DSkin(Me)
ds.Show(Me)
End If
MyBase.OnVisibleChanged(e)
Else
MyBase.OnVisibleChanged(e)
DWin32.AnimateWindow(Me.Handle, 150, DWin32.AW_BLEND Or DWin32.AW_HIDE)
End If
End Sub

问题是,用vb.net 定义SkinForm 必须要用private skin as SkinForm(me)才可以,但是如果这样,程序运行就会导致溢出,报错显示无限循环。如果用private skin as SkinFrom 这样也报错,必须要有参数。
请问各位大神,怎么转换。或者代码应该怎么写?
...全文
168 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckp00001 2015-02-20
  • 打赏
  • 举报
回复
       
  Private skin As SkinForm
    Protected Overrides Sub OnVisibleChanged(ByVal e As System.EventArgs)

        skin = New SkinForm(Me)
        skin.Show(Me)
        MyBase.OnVisibleChanged(e)

    End Sub
'试过了,这个代码没有问题的。

110,532

社区成员

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

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

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