【问题标题】:How to distinguish between User Control load on form and load when runtime如何区分表单上的用户控件加载和运行时加载
【发布时间】:2011-07-21 14:32:59
【问题描述】:

我使用 C# 为 Windows 窗体应用程序创建了一个用户控件。此用户控件具有一些属性。在运行时,如果用户没有为此属性输入值,我想显示一个消息框并退出应用程序。

问题是当我在用户控件的加载事件中编写检查代码时。当我将它拖放到表单上时,会出现消息框。

private void UserControl1_Load(Object sender, EventArgs e) 
{
    if (_getFirstPageArgument==null || _getFirstPageArgument.Length==0) 
    { 
        throw new Exception("Some Message"); 
    }
}

如何区分表单加载和运行时加载?

【问题讨论】:

  • 您是指 WinForms 应用程序还是 WPF 应用程序?
  • 你能举个例子吗?你在哪里显示这个 MessageBox?

标签: c# winforms user-controls c#-4.0


【解决方案1】:

对于初学者来说,@Nimas 案例是一个很好的学习点,可以很好地了解 Visual Studio 会在设计时实际运行并执行我们的部分代码,这就是调用构造函数的原因。甚至“DesignMode”属性也不是 100% 可靠的。您可以在此处找到与 http://weblogs.asp.net/fmarguerie/archive/2005/03/23/395658.aspx 相关的有趣注释

【讨论】:

    【解决方案2】:

    我担心这里有一个更大的问题。但是为了解决你眼前的问题(如果我理解正确的话......)有一个名为DesignMode的表单属性。当您处于 Visual Studio 设计模式时,这将是 true。在运行时,这将是false

    【讨论】:

    • @climbage: 我找不到 DesignMode。我写了这段代码 Form frmParent = this.ParentForm;但 frmParent 没有 DesignMode
    • +1 这是解决方案。经常看到“if (!this.DesignMode) return;”作为 Load 事件处理程序的第一行。
    • @Nima - DesignMode 是受保护的属性,您需要改用 this.DesignMode。
    • 谢谢我的朋友。是的,它并不可靠。考虑这种情况:我创建了一个用户控件并将其放在一个表单上。我的用户控件具有类型为 obejct[] 的属性。我希望它在运行时不为空或为空,并在表单加载事件中分配此属性。新问题是用户控件的加载事件在表单加载事件之前执行,但是 DesignMode 为 false,但因为我的属性尚未分配消息框出现
    • @Joe:谢谢,但问题仍然存在。我将其解释为下面的答案。
    【解决方案3】:

    如果您只想知道类型本身何时加载到运行时(而不是特定实例),您可以将代码放入该类的静态构造函数中。

    如果我误解了您的问题,请在您希望发生特定事件时使用时间线进行说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 2021-06-28
      • 1970-01-01
      相关资源
      最近更新 更多