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

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);
在里面加了一个图片,然后所有的窗体都继承这个类,窗体在设计时就出现错误呀?
...全文
311 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)
内容简介 《Visual Basic 2010从入门到精通(Step by Step)》全面介绍了visual basic 2010的编程思想及特色,主要包括如何使用控件创建简单的应用程序,如何编写条件分支结构和循环结构、调试程序以及更正程序中的错误,如何设计用户界面、实现数据库和web编程等。 《Visual Basic 2010从入门到精通(Step by Step)》重要主题: ·使用Visual Basic 2010集成开发环境(IDE) ·构建用户界面并进行自定义 ·掌握管理代码执行流程和数据的核心技术 ·添加窗体,用于自定义特性和功能 ·调试程序和处理运行错误 ·使用ADO.NET 4构建以数据为中心的应用程序 ·使用.NET Framework 4中功能强大的类和方法 ·添加动画效果、可视化继承和打印支持 ·使用ASPNET 4进行Web编程 作者简介 作者:(美国)哈尔弗森(Michael Halvorson) 译者:张丽蘋 汤涌涛 曹丹阳 目录 第Ⅰ部分 开始使用Visual Basic 2010 第1章 Visual Studio集成开发环境 第2章 编写第1个程序 第3章 使用工具箱控件 第4章 使用菜单、工具栏和对话框 第Ⅱ部分 编程基础 第5章 Visual Basic变量、公式和.NET Framework 第6章 条件分支结构 第7章 循环结构和计器 第8章 调试Visual Basic程序 第9章 使用结构化错误处理程序捕获错误 第10章 使用模块和过程 第11章 使用数组管理数值和字符串数据 第12章 使用集合 第13章 处理文本文件和字符串 第Ⅲ部分 设计用户界面 第14章 在运行管理Windows窗体和控件 第15章 添加图形和动画效果 第16章 继承窗体和创建基类 第17章 使用打印机 第Ⅳ部分 数据库和Web编程 第19章 使用DataGridView控件显示数据 第20章 使用Visual Web Developer和ASP.NET创建网站和网页 第Ⅴ部分 附录

110,534

社区成员

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

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

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