是否在winforms用户控件中宿主对话框?

是否在winforms用户控件中宿主对话框?,winforms,Winforms,是否可以在UserControl内部“主持”对话框 在我的情况下,我想要一个颜色选择器,但在侧面有一些额外的文本框和按钮。干净、方便?…不。“可能”吗,当然。值得这么做?…可能不值得。我只需要滚动我自己的表单,它有这个功能,这样你就可以完全自定义它。它实际上非常简单,你可以使用Task.run()运行对话框,并调用ShowDialog(),SetParent()(将它作为容器的父对象)+SetWindoPos()(SWP\u NOSIZE+SWP\u SHOWWINDOW)将其移动到位。对话框关

是否可以在UserControl内部“主持”对话框


在我的情况下,我想要一个颜色选择器,但在侧面有一些额外的文本框和按钮。

干净、方便?…不。“可能”吗,当然。值得这么做?…可能不值得。我只需要滚动我自己的表单,它有这个功能,这样你就可以完全自定义它。它实际上非常简单,你可以使用
Task.run()
运行对话框,并调用
ShowDialog()
SetParent()
(将它作为容器的父对象)+
SetWindoPos()
SWP\u NOSIZE
+
SWP\u SHOWWINDOW
)将其移动到位。对话框关闭时,读取
.Color
属性并返回此值,或使用实现
INotifyPropertyChanged
的处理程序类来通知所做的选择。但它有点蹩脚,你必须展示这个对话。你可以找到已经构建的开源控件,它们以不同的方式实现了颜色选择器,有些非常酷。@Jimi,哈哈……你刚才对作者的技能水平做了很多假设。他们可能会做到,也可能不会!无论如何,要使用
SetParent()
我们需要一个对话框的窗口句柄,所以现在我们需要使用一堆其他API来查找它,或者需要从ColorDialog继承它,以便公开它。不管怎样,这都不是“非常简单”。=)@别介意,这是在任务中运行的。您可以使用FindWindowEx或UI Automation的
WindowPattern.WindowOpenedEvent
获取句柄,因为您知道它的类名将是
32770
,并且进程ID与您的应用程序相同。这只是两行代码(好的,3行)。OP是SO的一名12岁成员,我假设像
SetParent
SetWindoPos
这样的事情并非完全闻所未闻。也许我会写一些代码来测试,只是为了好玩。你可能会对涉及颜色对话框的测试感兴趣。