C# 调用ShowDialog()而不实际显示表单
我需要在我的C# 调用ShowDialog()而不实际显示表单,c#,winforms,compact-framework,C#,Winforms,Compact Framework,我需要在我的窗体上调用ShowDialog(),而不实际显示对话框(保持可见设置为false)。不幸的是,没有像完整框架上那样的VisibleChanged事件。我也无法覆盖可见的属性。我能想到的最接近的方法是覆盖OnLoad并在新线程中调用Hide(因为表单的可见性是在加载后设置的)。这显然是一个疯狂的黑客行为(更不用说它看起来真的很糟糕,因为你可以看到一个表单被绘制,然后隐藏在屏幕上),但我真的想不出另一种方法来做到这一点。有什么想法吗 编辑:我需要调用ShowDialog(),因为我使用的
窗体上调用ShowDialog()
,而不实际显示对话框(保持可见设置为false
)。不幸的是,没有像完整框架上那样的VisibleChanged
事件。我也无法覆盖可见的属性。我能想到的最接近的方法是覆盖OnLoad
并在新线程中调用Hide
(因为表单的可见性是在加载后设置的)。这显然是一个疯狂的黑客行为(更不用说它看起来真的很糟糕,因为你可以看到一个表单被绘制,然后隐藏在屏幕上),但我真的想不出另一种方法来做到这一点。有什么想法吗
编辑:我需要调用ShowDialog()
,因为我使用的是一个有缺陷的第三方库,它只有在这样的表单中调用时才能工作,在我的场景中,我不需要也不需要任何UI。我已经和第三方确认了这个错误,但是他们目前没有任何资源来解决这个问题,所以我不得不采取一些疯狂的解决方法
Edit2:关于我的问题,这里有一些更具体的信息:
这项工作:
MyForm_OnLoad(...)
{
thirdPartyLib.StartUp(MyCallback);
}
private void MyCallback(...)
{
// Do some work with the data passed in.
}
这并不是:
public static void Main()
{
thirdPartyLib.StartUp(MyCallback);
// Sleep for a bit to allow the library to fire the callback.
// Normally, the callback is triggered several times a second.
Thread.Sleep(20000);
}
private void MyCallback(...)
{
// This callback is never invoked by the library.
}
因此,我能让事情正常运行的唯一方法是以的形式使用库。不幸的是,我不想在我的应用程序中显示表单,所以我尝试使用表单来安抚库,但不显示任何内容来适应我的应用程序。我愿意接受建议
请注意,compact framework winforms API不支持不透明性,也没有显示OnShown
事件(也没有VisibleChanged
)
Edit3:对不起,伙计们,我不想含糊其辞,我只是不想迷失在看似无关的细节中。第三方库从通过USB连接的特殊摄像头捕获图像。回调函数使用两个不同的参数启动,以指示当前状态和来自相机的图像数据。听起来第三方库正在使用Windows消息进行调度,虽然你仍然不太清楚实际的问题是什么,而且似乎过于关注你所决定的方法,我仍然认为这是错误的
如果您需要在窗口中使用控件的原因是因为它使用Windows消息进行调度,那么您可以使用MessageWindow来接收消息或通过自己调用GetMessage/TranslateMessage/DispatchMessage来解决此问题
再次告诉我们实际的根本问题是什么,而不是您试图实施的解决方案遇到的困难。听起来第三方库正在使用Windows消息进行调度,虽然你仍然不太清楚实际的问题是什么,而且似乎过于关注你所决定的方法,我仍然认为这是错误的
如果您需要在窗口中使用控件的原因是因为它使用Windows消息进行调度,那么您可以使用MessageWindow来接收消息或通过自己调用GetMessage/TranslateMessage/DispatchMessage来解决此问题
再次告诉我们实际的根本问题是什么,而不是您试图实现的解决方案遇到的困难。这里有一种方法可以最小化表单,因为您没有FormWindowsState。在compact framework中可以最小化
由于您没有FormWindowsState,这里有一种最小化表单的方法。可在compact framework中使用最小化
您能解释一下为什么需要调用ShowDialog而不显示它吗?“有人给你一个替代方法可能会有帮助。”msergeant同意。看起来你们正试图解决一个潜在的问题,这是一个解决方案。但是可能有更好的方法,因为在对话框模式下显示某些内容的全部目的是让他们不能做任何其他事情。是的。与其告诉我们您是如何决定解决问题的(这几乎肯定是错误的),不如告诉我们您试图解决的实际问题是什么。在调用ShowDialog()之前,您是否可以将窗口设置为完全透明?我认为compact框架不支持透明表单。您能解释一下为什么需要调用ShowDialog而不显示它吗?“有人给你一个替代方法可能会有帮助。”msergeant同意。看起来你们正试图解决一个潜在的问题,这是一个解决方案。但是可能有更好的方法,因为在对话框模式下显示某些内容的全部目的是让他们不能做任何其他事情。是的。与其告诉我们您是如何决定解决问题的(这几乎肯定是错误的),不如告诉我们您试图解决的实际问题是什么。在调用ShowDialog()之前,您是否可以将窗口设置为完全透明?我不相信compact框架支持透明表单。compact框架上没有OnShown
,也没有FormWindowsState。最小化了enum值。我只能在ShowDialog
中创建窗口句柄后调用ShowWindow
。但是我可以使用Hide()
,这意味着我又回到了现在的状态(我希望有一种方法可以创建我自己的ShowDialog()
但我有一种感觉.NET使用了大量内部和本地的东西来实现真正的版本,所以我不知道重新实现它有多容易。compact framework上没有OnShown
,也没有FormWindowsState。最小化了枚举值。我只能在一个窗口之后调用ShowWindow
ndle是在ShowDialog
中创建的。但是我可以使用Hide()
,这意味着我回到了现在的工作中。(我希望有一种方法可以创建我自己的ShowDialog()
,但我有一种感觉。NET使用了一个小面包。)