这几天,菜鸟D一直在搞自定义控件(都是经理的错),前几天被设计界面的加载出错整的相当惨,好在找到了解决办法。就在今天,同事无意中提到的一个问题,让菜鸟D折腾了一天。
“你知道吗?自定义控件往设计器界面里拖的时候,会执行自定义控件的某些方法。”
“当然知道,我重写自定义控件的宽度属性,可以让自定义控件的宽度改变时,内部控件的定位也随之发生变化。”
“来看看这个...”
“我X,你这怎么做到的?我懂了...”
经过这几天的折腾,发现了“自定义控件在设计器界面也会执行一些代码,甚至都不需要程序运行”的特点。然后就实现了拖到窗体上一个自定义控件,关闭设计界面后再次打开,窗体的宽度逐渐缩减的效果。心里一猥琐:能不能开个线程,把目标的C盘格了,感觉告诉我这是可行的。
先说一下怎么实现的,直接上代码:
//自定义控件--这是所有控件拖到窗体上一定会触发的事件 private void ucTest_VisibleChanged(object sender, EventArgs e) { //new Thread(test111).Start(); //new Thread(test222).Start(); } //窗体宽度缩减 private void test111() { Form ff = this.Parent as Form; if (ff != null) { while (ff.Width > 50) { ff.Width--; } } } //10次弹窗而已 private void test222() { int i = 0; Form ff; while (i < 10) { ff = new Form(); ff.Text = i.ToString(); ff.ShowDialog(); i++; }
在自定义控件中找一个在设计界面就会执行的方法,如VisibleChanged事件(还有很多,这里只举一例),然后把想要执行的代码写进去,生成。最好写一个线程,线程容易伪装嘛。然后当自定义控件被拖到设计界面的窗体上时,“崩——吓老子一跳!”也许什么事也没发生,也许效果已经很明显了。如果什么也没发生,关掉设计器界面再打开一次,这次一定会执行。
如果你写的代码杀意太强,把自己电脑弄崩了,呵呵,自己作死怨不了别人。然后试想一下,定义一个自定义控件,如上方法注入攻击(开个线程,偷窥硬盘上的资料等等,你懂得),用混淆器混淆一下代码,放到网上免费使用,然后别人往程序里一拖,哈哈中招了吧...(无限YY中)
其实,这东西也不可能当病毒来用,这种方式的传播范围很窄,几乎没什么传播的范围,程序猿也不一定到网上找什么自定义控件,所以几乎不会被传播(程序猿在广大网民中的比例还是不高的)。杀伤力再高有毛用,再说要到网上查传播源也是很容易的,一不小心家里的水表就被抄了。
本文的目的在于,给大家找了一个恶趣味的工具罢了(现在懂了DesignMode的作用了吧)。
菜鸟D希望这篇文字能帮到你。