初学C#
我想做一个容器,里面用户可以动态的添加,删除,排序子控件
效果如下图(gif):
先想了好久怎么做。还尝试找找别人有没有做好的分享的三方类库
结果刚刚想自己试着捣鼓一下,万一搞出来了呢
结果真搞出来了
代码竟然只有这么一点点:
[C#] 纯文本查看 复制代码 private void button4_MouseDown(object sender, MouseEventArgs e)
{
Button btn = (Button)sender;
btn.DoDragDrop(sender, DragDropEffects.Move);
}
private void button4_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void button4_DragDrop(object sender, DragEventArgs e)
{
Button btn = (Button)sender;
Button source = (Button)e.Data.GetData(typeof(Button));
source.Parent.Controls.SetChildIndex((Button)source, btn.Parent.Controls.GetChildIndex(btn));
Debug.WriteLine("拖放完成");
}
还没有动态添加删除的功能,这两个功能,只需要加2行代码足够了
“button4_”名称前缀的方法类似易语言里面的事件(这个名字有点误导性,实际4个按钮的对应事件,都绑定到同一个方法)
这个滚动的容器是个这个东西:FlowLayoutPanel:
他的功能是,添加到里面的控件,会忽略左边和顶边属性,反正给你一个一个挨着排列好,里面的布局上的空白,有padding啊,margin啊之类的属性,自己设置
正因为这个功能,所以我上面的代码不需要重新修改控件的左边啊,顶部之类的,只需要交换控件Zindex顺序(SetChildIndex),会自动排列好
然后超出容器的部分,可以自动处理滚动条,这不是FlowLayoutPanel专有的功能,winfrom里好像大多数可以做控件容器的控件,都有一个autoscroll属性,功能如名:
比如我们熟悉的选择夹,主窗口也可以:
只需要设置为true,控件移动过,添加过新的子控件,或者父窗口本身变小了,导致装不下了,滚动条自动出来
总之,用上面那一点点代码,完成了我凭空构想的功能,我愿称winfrom为
可视化编程宇宙最强
但是听老手比较WPF和winfrom,winfrom又是个弟弟了,初学C#,还没了解过WPF,很期待
有个想法:
希望论坛抽空把易语言的核心支持库弄份C#的出来,这样易友们可以轻松的转到C#,什么接口,抽象,泛型都不管,统一面向过程编程,照样能起飞
造福一下广大易友脱离苦海升天得道
C#唯一的缺点就是容易被反编译
|