【发布时间】:2013-07-23 22:57:46
【问题描述】:
所有,我有一个UserCostrol,我最近不得不更改它。这种改变要求我引用Parent 表单并使用该表单中的属性。这些引用似乎破坏了设计器 - 我遇到了一个错误
“无法将“System.Windows.Forms.Form”类型的对象转换为“Project.SettingsForm”类型”
在Unable to cast object of type 'System.Windows.Forms.Form' to type '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'”],同时保持 @ 的功能987654328@?
感谢您的宝贵时间。
【问题讨论】:
-
使用事件与父表单对话。
-
你为什么不直接使用:
var settingsForm = (SettingsForm)this.ParentForm;? -
@AlexFilipovici 这就是重点,在
UserControl初始化的设计时编译期间,控件不应该知道任何关于父表单类型的信息。我试图使用一个仍然不理想的属性来“抽象它”,显然......
标签: c# winforms user-controls designer