如何从UserControl正确引用父窗体

月亮骑士

所有,我有一个UserCostrol我最近不得不更改的。更改后,我需要引用该Parent表单并使用该表单中的属性。这些参考资料似乎破坏了设计师-我遇到了一个错误

“无法将类型为'System.Windows.Forms.Form'的对象转换为类型为'Project.SettingsForm'的对象”

无法将类型为'System.Windows.Forms.Form'的对象转换为类型为'Project.Form1'中进行了描述

我已经添加了一个属性来处理对Parent表单的引用,如上面引用的答案中所述,但是现在设计器错误是在说

“无法将类型为'System.Windows.Forms.Panel'的对象转换为类型为'Project.SettingsForm'”。

'<-- Here'下面的代码用标记抱怨的第一行

public partial class UiSettingFascia : UserControl, ISettingsControl
{
    public UiSettingFascia()
    {
        InitializeComponent();
    }

    private void UiSettingFascia_Load(object sender, EventArgs e)
    {
        LoadSettings();
        CheckBoxShowTabs.CheckedChanged += Workbook_StateChanged;
        CheckBoxShowVirticalScroll.CheckedChanged += Workbook_StateChanged;
        CheckBoxShowHorizontolScroll.CheckedChanged += Workbook_StateChanged;
    }

    public void LoadSettings()
    {
        UserSettings userSettings = UserSettings.Instance();
        ...
        MainRibbonForm mainRibbonForm = (ControlParent).MainRibbonForm; // <-- Here.
        ...
    }
}

为了尝试解决最初的问题[ “无法将类型为'System.Windows.Forms.Form'的对象强制转换为'Project.SettingsForm''” ]我创建了以下属性

public SettingsForm ControlParent
{
    get { return Parent as SettingsForm; }
}

我如何解决此问题[ “无法将类型为'System.Windows.Forms.Panel'的对象转换为类型为'Project.SettingsForm'” ],同时又保持了我的功能UserControl

谢谢你的时间。

亚历克斯·菲利波维奇(Alex Filipovici)

添加此扩展方法

public static class DesignTimeHelper
{
    public static bool IsInDesignMode
    {
        get
        {
            bool isInDesignMode = (
                LicenseManager.UsageMode == LicenseUsageMode.Designtime || 
                Debugger.IsAttached == true);
            if (!isInDesignMode)
            {
                using (var process = Process.GetCurrentProcess())
                {
                    return process
                        .ProcessName.ToLowerInvariant()
                        .Contains("devenv");
                }
            }
            return isInDesignMode;
        }
    }
}

然后,在您的LoadSettings方法中:

public void LoadSettings()
{
    if (!DesignTimeHelper.IsInDesignMode)
    {
        var settingsForm = (SettingsForm)this.ParentForm;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从窗体内的UserControl,如何访问父窗体的DataGridView?

来自分类Dev

从窗体内的UserControl,如何访问父窗体的DataGridView?

来自分类Dev

在C ++中将父窗体的引用传递给子UserControl

来自分类Dev

如何从子窗体触发父窗体事件?

来自分类Dev

如何从模态更新父窗体

来自分类Dev

如何从UserControl的ContextMenu引用UserControl样式的元素?

来自分类Dev

Microsoft Access如何从子窗体刷新父窗体

来自分类Dev

Microsoft Access如何从子窗体刷新父窗体

来自分类Dev

如何在父窗体中更改子窗体控件的属性

来自分类Dev

如何将值从窗体传递到UserControl?

来自分类Dev

如何引用带有变量的子窗体?

来自分类Dev

如何引用带有变量的子窗体?

来自分类Dev

如何使用实体框架正确建模自引用多父关系

来自分类Dev

如何从已经在窗体中的另一个 UserControl 事件中将单例 UserControl 加载到窗体

来自分类Dev

如何从孩子访问父引用

来自分类Dev

如何在VBA中找到控件的父用户窗体

来自分类Dev

如何从MDI子窗体中获取MDI父控件

来自分类Dev

从窗体UserControl转换为WPF UserControl

来自分类Dev

当子窗体在代码中调整大小时,如何自动调整父窗体的大小?

来自分类Dev

如何在C#中从子窗体调用父窗体方法?

来自分类Dev

在子窗体上单击“ X”时,如何将不同的结果传递给父窗体?

来自分类Dev

如何将类对象子窗体发送到父窗体C#

来自分类Dev

如何使用委托将活动窗体中的值获取到UserControl上的另一个窗体

来自分类Dev

我如何在C#中将数据从子窗体发送到父MDI窗体或将父MDI从数据发送到子窗体?

来自分类Dev

如何在关闭父级而不关闭两个父级之前加载子窗体

来自分类Dev

如何从javascript中的父对象引用变量

来自分类Dev

如何通过变量引用父对象?

来自分类Dev

如何正确使窗体或窗口控件具有RecreateWnd意识?

来自分类Dev

子窗体始终位于父窗体顶部

Related 相关文章

  1. 1

    从窗体内的UserControl,如何访问父窗体的DataGridView?

  2. 2

    从窗体内的UserControl,如何访问父窗体的DataGridView?

  3. 3

    在C ++中将父窗体的引用传递给子UserControl

  4. 4

    如何从子窗体触发父窗体事件?

  5. 5

    如何从模态更新父窗体

  6. 6

    如何从UserControl的ContextMenu引用UserControl样式的元素?

  7. 7

    Microsoft Access如何从子窗体刷新父窗体

  8. 8

    Microsoft Access如何从子窗体刷新父窗体

  9. 9

    如何在父窗体中更改子窗体控件的属性

  10. 10

    如何将值从窗体传递到UserControl?

  11. 11

    如何引用带有变量的子窗体?

  12. 12

    如何引用带有变量的子窗体?

  13. 13

    如何使用实体框架正确建模自引用多父关系

  14. 14

    如何从已经在窗体中的另一个 UserControl 事件中将单例 UserControl 加载到窗体

  15. 15

    如何从孩子访问父引用

  16. 16

    如何在VBA中找到控件的父用户窗体

  17. 17

    如何从MDI子窗体中获取MDI父控件

  18. 18

    从窗体UserControl转换为WPF UserControl

  19. 19

    当子窗体在代码中调整大小时,如何自动调整父窗体的大小?

  20. 20

    如何在C#中从子窗体调用父窗体方法?

  21. 21

    在子窗体上单击“ X”时,如何将不同的结果传递给父窗体?

  22. 22

    如何将类对象子窗体发送到父窗体C#

  23. 23

    如何使用委托将活动窗体中的值获取到UserControl上的另一个窗体

  24. 24

    我如何在C#中将数据从子窗体发送到父MDI窗体或将父MDI从数据发送到子窗体?

  25. 25

    如何在关闭父级而不关闭两个父级之前加载子窗体

  26. 26

    如何从javascript中的父对象引用变量

  27. 27

    如何通过变量引用父对象?

  28. 28

    如何正确使窗体或窗口控件具有RecreateWnd意识?

  29. 29

    子窗体始终位于父窗体顶部

热门标签

归档