所有,我有一个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
?
谢谢你的时间。
添加此扩展方法:
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] 删除。
我来说两句