窗体继承了一个基类后,设计时出现错误

lhfdc 2008-12-19 10:25:33
我有一个基类,继承Form
public class BaseForm : Form
里面重写了OnLoad()方法,
PictureBox pb = new PictureBox();
Bitmap image = new Bitmap(Utity.ApplicationPath + "/images/00.jpg");
pb.Image = image;
pb.Location = new Point(0, 0);
this.Controls.Add(pb);
在里面加了一个图片,然后所有的窗体都继承这个类,窗体在设计时就出现错误呀?
...全文
353 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
doerszetasoft 2010-09-22
  • 打赏
  • 举报
回复
是窗体继承产生的问题
假设 FormSon--->FormParent
由于继承的窗体会自动运行 父窗体 FormParent的On_Load的代码,所以如果父窗体在On_Load事件中写了只能在运行时的代码时,那么在设计时打开继承窗体就有可能出现问题,就是子窗体打不开,而且提示报错!
所以最好在 on_load事件那些需要运行时生效的代码用 if (!DesignMode)
{。。。。。。您的代码
}
这样继承的窗体在打开时就不会试图运行你的代码了!!!
pslh3 2008-12-20
  • 打赏
  • 举报
回复
学习
wanghui0380 2008-12-20
  • 打赏
  • 举报
回复
protected override void OnLoad(EventArgs e)
{
if(!DesignMode) {
PictureBox pb = new PictureBox();
Bitmap image = new Bitmap(Utity.ApplicationPath + "\\images\\00.jpg");
pb.Image = image;
pb.Location = new Point(0, 0);
this.Controls.Add(pb);
this.BackColor = Color.Black;
foreach (Control control in this.Controls)
{
if (control.ForeColor == SystemColors.ControlDarkDark || control.ForeColor == SystemColors.ControlText)
{
control.ForeColor = Color.White;
}
}
}
base.OnLoad(e);
}

如红字所示,判断一下是否在设计期DesignMode,如果是非设计期才运行你自己的代码
mathieuxiao 2008-12-20
  • 打赏
  • 举报
回复

private void FormBase_Load(object sender, EventArgs e)
{
PictureBox pb = new PictureBox();
Bitmap image = new Bitmap("Autumn.jpg");
pb.BackgroundImage = image;
pb.BackgroundImageLayout = ImageLayout.Stretch;
pb.Location = new Point(0, 0);
pb.Width = 300;
pb.Height = 200;
this.Controls.Add(pb);
this.BackColor = Color.Black;
foreach (Control control in this.Controls)
{
if (control.ForeColor == SystemColors.ControlDarkDark ||
control.ForeColor == SystemColors.ControlText)
{
control.ForeColor = Color.White;
}
}
}

一点问题都没有,正常显示
mathieuxiao 2008-12-20
  • 打赏
  • 举报
回复
714291519,你加我吧
xuqunying0545 2008-12-20
  • 打赏
  • 举报
回复
UP
lhfdc 2008-12-20
  • 打赏
  • 举报
回复
我重新设计了一个,下面是代码
这是一个基窗体的代码
这是基类Form1的代码
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint();
Bitmap companyLogo = new Bitmap(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)+"/00.jpg");
e.Graphics.DrawImage(companyLogo, 0, 0);
e.Graphics.DrawString("测试", new Font(FontFamily.GenericSansSerif, 12, FontStyle.Bold), new SolidBrush(Color.Red), 30, 2);
//DrawBackGround(e.Graphics);
}

这是Form2的代码子类窗体
public partial class Form2 : Form1
{
public Form2()
{
InitializeComponent();
}
}
在打开Form2界面设计时就报这个错误我把图片贴上来
啊,不能传图片



若要在加载设计器前避免可能发生的数据丢失,必须纠正以下错误:



1 个错误

为什么会看到此页?





不支持 URI 格式。




此错误的实例(1)

1。 显示调用堆栈

在 System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)
在 System.IO.Path.GetFullPathInternal(String path)
在 System.IO.Path.GetFullPath(String path)
在 System.Drawing.IntSecurity.UnsafeGetFullPath(String fileName)
在 System.Drawing.IntSecurity.DemandReadFileIO(String fileName)
在 System.Drawing.Bitmap..ctor(String filename)
在 PPCtet.Form1..ctor() 位置 E:\fangolf\window\PPCtet\PPCtet\Form1.cs:行号 18

有关此错误的帮助

MSDN 帮助


有关此错误的论坛文章

在 MSDN 论坛中搜索与此错误相关的文章



lhfdc 2008-12-19
  • 打赏
  • 举报
回复
你的QQ是多少,我加你一下,把你做的那个测试项目我看一下,行吗?
lhfdc 2008-12-19
  • 打赏
  • 举报
回复
我刚创建了了一window的类,可是还是显示不正常呀,你加什么标签
mathieuxiao 2008-12-19
  • 打赏
  • 举报
回复
你可能是直接在项目中添加的是一个普通class类,而不是一个Window类,所以虽然你继承了Form,但是还有一些自动生成的代码漏掉了。
mathieuxiao 2008-12-19
  • 打赏
  • 举报
回复
你没有写BaseForm.Designer.cs文件中的内容
在你的窗体代码中加上

/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows 窗体设计器生成的代码

/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "BaseForm";
}

#endregion

我刚才做了测试,加一个标签到你的窗体,可以正常显示。
lhfdc 2008-12-19
  • 打赏
  • 举报
回复
就是在设计时出错,运行后是对的,但是这样的话,就没有办法看到设计的界面呀,也没有办法设计界面了,有没有知道怎么回事呀,
lhfdc 2008-12-19
  • 打赏
  • 举报
回复
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace panGolFramework
{
/// <summary>
///
/// </summary>
public class BaseForm : Form
{
/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)
{
PictureBox pb = new PictureBox();
Bitmap image = new Bitmap(Utity.ApplicationPath + "\\images\\00.jpg");
pb.Image = image;
pb.Location = new Point(0, 0);
this.Controls.Add(pb);
this.BackColor = Color.Black;
foreach (Control control in this.Controls)
{
if (control.ForeColor == SystemColors.ControlDarkDark || control.ForeColor == SystemColors.ControlText)
{
control.ForeColor = Color.White;
}
}
base.OnLoad(e);
}
//protected override void
/// <summary>
/// 通过控件名称寻找控件
/// </summary>
/// <param name="controlName"></param>
/// <returns></returns>
protected virtual Control FindControl(string controlName)
{
foreach (Control control in this.Controls)
{
if (control.Name == controlName)
{
return control;
}
}
return null;
}
}
}

这个基类

public partial class Form1 : BaseForm
{
public Form1()
{
InitializeComponent();
}
}这个Form1窗体,继承了那个基类后,界面就打不开了,关了重新打开也是一样
mathieuxiao 2008-12-19
  • 打赏
  • 举报
回复
我觉得你可能没有调用InitializeComponent();所以才会出现在窗体上什么都不显示的现象
mathieuxiao 2008-12-19
  • 打赏
  • 举报
回复
基类窗体的构造函数需要调用一下,把你的子类窗体构造函数贴出来看看
sunchaohuang 2008-12-19
  • 打赏
  • 举报
回复
把窗体关掉了在打开就OK了 我也是这么解决的。。。。。
fenglm999 2008-12-19
  • 打赏
  • 举报
回复
这个是不影响使用的 从你给出的代码 也许是哪里引用不到
lhfdc 2008-12-19
  • 打赏
  • 举报
回复
没有关系是没有关系,但是我在设计界面的时候,看不到界面呀
米菲爸爸 2008-12-19
  • 打赏
  • 举报
回复
这个没关系,不影响编译使用
assky124 2008-12-19
  • 打赏
  • 举报
回复
你应该重写OnPain事件而不是OnLoad
窗体在没有运行的时候应该不会调用OnLoad的

//在OnPain时间中添加
base.OnPain(e);
e.Griphics.DrawImage(Image.FromFile("filePath"),this.Bound); //绘制背景图
//可能拼写有点错误
加载更多回复(1)

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧