可以。
视图树。
了解一下gdi+到控件的实现,具体直接看control源码就行了(视图树wpf、Android甚至游戏视图树这个肯定是差不多的,注意名词的核心是树,视图本身各种模式肯定区别还是比较大,尤其游戏类)。
当然你可以尝试自己实现简单的类似directui,用gdi+,dx,opengl都可以。
核心在于知道视图(树),以及交互、动画的消息或者事件模型。
要实现你想的控件,你可以直接从control实现,也可以用控件组合;控件组合是相对简单粗暴的方式。
能否提供一些小用例?怎么听着有点烧脑哈哈哈
@😀明笔记: 说了看winForm control源码。
要更多理解就自己动手写(“当然你可以尝试自己实现简单的类似directui,用gdi+,dx,opengl都可以。”)。
class Ui
{
protect virtual OnDraw(Graphic grp)
{
}
}
class Ue:Ui
{
protect void DispatcherMessage(Message msg){}
//如果简单点,你可以这里实现Click等等
public Collection<Ui> Children{}=new ....
override OnDraw(...){}
}
自己慢慢填,符合自己的最小点就行了,不然很复杂。
@😀明笔记: 或者你可以看cocos之类的也可以,它简单之处在于没有这么复杂的“事件”实现
@花飘水流兮: 好的,谢谢,我研究研究
@😀明笔记: 上面的题目练习了,你还会理解for foreach,当然click的实现,还有一些人不会的定时器(比如12点触发)等等henduo.
这就是一个自定义控件!
不使用自定义控件的话自己制定容器的show也是可以的!
但是我想要的效果是,拖拉这个控件的时候,我可以像tabcontrol控件一样,可以切换容器,也可以在里面放控件
如果是wpf,重写一下默认控件的模板也许可以。如果是winform,实现方式应该也很多。我想到第一个办法是:写N个自定义控件,放到一个容器里(右边)。左边点击按钮时,用代码替换容器里的自定义控件:伪代码如下:
btn1.click += function()
{
this.container.children.remove(0);
this.container.chidren.Add(a);
}
btn2.click += function()
{
this.container.children.remove(0);
this.container.chidren.Add(b);
}
或者是设置自定义控件是否可见
---or---
或者用mdi窗体
请问有没有这样的方法:用一个自定义控件就可以解决我的问题的?
@😀明笔记: 我觉得可以
@会长: 现在遇到的问题是,我自定义一个控件“MC”,在MC里放了两个panel控件,生成解决方案,在设计窗体界面的时候,往自定义控件的panel里面发控件,发现发不进去,需要放进去的控件,并不会跟着自定义控件的panel一起移动。🙂...请问会长大人可有指点?
@😀明笔记: 很久没有做winform了,你说的不和panel一起移动是什么意思?
@会长: 意思是:
1、普通的panel控件(C#内置的),假设往这个控件里面放置A、B控件,当你拖拉这个panel控件的时候,AB控件会跟着这个控件走。删除这个panel控件,AB也会跟着一起删除
2、但是,在自定义控件里面的panel控件,就不能完成这样的做法。(但是我想在我自定义的控件里面完成这样的做法)。
我有说清楚吗?😀?
@😀明笔记: 不懂你说的,我写了一个例子,你看看。我写的很简单,你看看能用不,如果能用,再往好改下。https://files.cnblogs.com/files/zzy0471/WinformTest.zip
@会长: 但是这样设计的话,我在编辑窗体的时候,不能实时看到控件的摆放啊。
哈哈哈哈可能是我总结能力不够好,抱歉让你烦恼了。
我的意思是:能不能设计一个可以存储其他控件的自定义控件😀,并且这个存放的区域我可设置。
@😀明笔记: 你想做一个tabcontrol阿?我没做过,应该是可以的,因为很多第三方控件,人家能做,我们也能做的。你再研究下吧。我现在没有太多时间专门研究这个,不好意思阿。
@会长: 哈哈哈哈对对对,我就是这个意思。那会长有学习的方向会思路可以提供一下吗?小白懂的太少,也不知道从何入手这个问题,网上貌似也很少这样的方法。
@😀明笔记: 我也没搞过...
@会长: 好的,感谢你的耐心回答!!!
@😀明笔记: 不用谢,也没帮上什么