首页 新闻 会员 周边 捐助

C#如何做一个类似tabControl控件的用户控件

0
悬赏园豆:10 [已解决问题] 解决于 2020-11-09 15:32

想要自定义用户控件--功能类似tabControl控件的。
改变切换选项卡的方式,自定义成自己想要的效果。
是否可行?

😀明笔记的主页 😀明笔记 | 初学一级 | 园豆:13
提问于:2020-11-02 11:47
< >
分享
最佳答案
1

可以。

视图树。

了解一下gdi+到控件的实现,具体直接看control源码就行了(视图树wpf、Android甚至游戏视图树这个肯定是差不多的,注意名词的核心是树,视图本身各种模式肯定区别还是比较大,尤其游戏类)。

当然你可以尝试自己实现简单的类似directui,用gdi+,dx,opengl都可以。

核心在于知道视图(树),以及交互、动画的消息或者事件模型。

要实现你想的控件,你可以直接从control实现,也可以用控件组合;控件组合是相对简单粗暴的方式。

收获园豆:5
花飘水流兮 | 专家六级 |园豆:13615 | 2020-11-02 19:15

能否提供一些小用例?怎么听着有点烧脑哈哈哈

😀明笔记 | 园豆:13 (初学一级) | 2020-11-03 14:24

@😀明笔记: 说了看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(...){}

}

 

自己慢慢填,符合自己的最小点就行了,不然很复杂。

花飘水流兮 | 园豆:13615 (专家六级) | 2020-11-03 15:25

@😀明笔记: 或者你可以看cocos之类的也可以,它简单之处在于没有这么复杂的“事件”实现

花飘水流兮 | 园豆:13615 (专家六级) | 2020-11-03 15:27

@花飘水流兮: 好的,谢谢,我研究研究

😀明笔记 | 园豆:13 (初学一级) | 2020-11-03 15:29

@😀明笔记: 上面的题目练习了,你还会理解for foreach,当然click的实现,还有一些人不会的定时器(比如12点触发)等等henduo.

花飘水流兮 | 园豆:13615 (专家六级) | 2020-11-03 15:48
其他回答(2)
0

这就是一个自定义控件!

不使用自定义控件的话自己制定容器的show也是可以的!

Jonny-Xhl | 园豆:691 (小虾三级) | 2020-11-02 12:10

但是我想要的效果是,拖拉这个控件的时候,我可以像tabcontrol控件一样,可以切换容器,也可以在里面放控件

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-11-02 12:36
1

如果是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窗体

收获园豆:5
会长 | 园豆:12463 (专家六级) | 2020-11-02 13:59

请问有没有这样的方法:用一个自定义控件就可以解决我的问题的?

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-11-02 14:02

@😀明笔记: 我觉得可以

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2020-11-02 14:04

@会长: 现在遇到的问题是,我自定义一个控件“MC”,在MC里放了两个panel控件,生成解决方案,在设计窗体界面的时候,往自定义控件的panel里面发控件,发现发不进去,需要放进去的控件,并不会跟着自定义控件的panel一起移动。🙂...请问会长大人可有指点?

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-11-02 14:08

@😀明笔记: 很久没有做winform了,你说的不和panel一起移动是什么意思?

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2020-11-02 14:09

@会长: 意思是:
1、普通的panel控件(C#内置的),假设往这个控件里面放置A、B控件,当你拖拉这个panel控件的时候,AB控件会跟着这个控件走。删除这个panel控件,AB也会跟着一起删除
2、但是,在自定义控件里面的panel控件,就不能完成这样的做法。(但是我想在我自定义的控件里面完成这样的做法)。
我有说清楚吗?😀?

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-11-02 14:14

@😀明笔记: 不懂你说的,我写了一个例子,你看看。我写的很简单,你看看能用不,如果能用,再往好改下。https://files.cnblogs.com/files/zzy0471/WinformTest.zip

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2020-11-02 14:22

@会长: 但是这样设计的话,我在编辑窗体的时候,不能实时看到控件的摆放啊。
哈哈哈哈可能是我总结能力不够好,抱歉让你烦恼了。
我的意思是:能不能设计一个可以存储其他控件的自定义控件😀,并且这个存放的区域我可设置。

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-11-02 14:35

@😀明笔记: 你想做一个tabcontrol阿?我没做过,应该是可以的,因为很多第三方控件,人家能做,我们也能做的。你再研究下吧。我现在没有太多时间专门研究这个,不好意思阿。

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2020-11-02 14:41

@会长: 哈哈哈哈对对对,我就是这个意思。那会长有学习的方向会思路可以提供一下吗?小白懂的太少,也不知道从何入手这个问题,网上貌似也很少这样的方法。

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-11-02 14:44

@😀明笔记: 我也没搞过...

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2020-11-02 15:42

@会长: 好的,感谢你的耐心回答!!!

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-11-02 15:43

@😀明笔记: 不用谢,也没帮上什么

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2020-11-02 19:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册