C# 隐藏函数使其在设计器中不可见

4

我有一个在设计师中引发异常的函数。如果设计师加载它,我可以避免调用该函数吗?是否有比try catch更好的属性或其他东西?

更多细节: 我的意思是win表单的Visual Studio设计器。我的表单使用单例,在初始化时调用LoadProject()。现在我想避免设计师调用LoadProject()函数。


哪个设计师 - Windows Forms 设计师?设计师调用的是哪个方法/函数? - Cecil Has a Name
同意。如果您改进问题并使其更加详细和具体,我会给您一个+1来抵消。 - Eric J.
3个回答

2

假设这是WinForms - 您可以检查当前是否处于设计模式,并使您的函数立即返回。

有一些复杂性在这篇文章中得到了完全解释,包括一种解决方案。


1
你可以尝试查看关于使用DesignMode属性的MSDN文章(此处链接)。这可能会对你有所帮助。你可以将抛出异常的代码包装在一个条件语句中,在设计时避免执行该代码。
请注意,这在构造函数中无法正常工作,因为设计器必须实例化对象,然后设置属性。

1

有几种方法可以检测您是否处于设计模式:

  • 检查控件的DesignMode属性的值。但是,在控件的构造函数中,这不起作用,因为它仅在控件被定位后返回true,而这只有在控件创建后才会发生。它还存在一个错误,即自定义控件内部的自定义控件将始终返回false。
  • 使用Application.ExecutablePath.ToLower().IndexOf("devenv.exe")检查当前应用程序路径是否包含devenv.exe。如果包含,则该控件由Visual Studio实例化。有点可怕,但它有效。
  • 检查LicenseManager.UsageMode的值是否为LicenseUsageMode.Designtime(请参阅我的答案以获取有关从控件的构造函数检测设计模式的更多详细信息)。请注意,这在构造函数中可以工作

在你的函数调用外包裹任何这些检查都应该解决你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接