如果我要写好几个差不多的WinForm窗口怎么做会简便一点??

桂花 2012-01-18 11:02:23
比如说都是学生的管理窗口,一个是管理1班,一个是管理2班的

我有几种思路:
1.在创建窗口的时候传参数,然后在窗口里面swith那个参数进行不同操作
这样的缺点是一个窗体里面的代码一大陀

2.是否可以创建一个父类,再继承什么的使得各窗口分开来而有一定共性???具体怎么实现没试过

3.。。。???

大家能提供一下思路吗???好让我搜索也有关键词啊
...全文
190 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
桂花 2012-01-20
  • 打赏
  • 举报
回复
还有人不?
charles_y 2012-01-20
  • 打赏
  • 举报
回复
1 如果界面基本没有变动的话,参数化好了
2 如果界面变动的多,usercontrol
桂花 2012-01-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gx176539813 的回复:]

继承类不就好了。方法都有了
[/Quote]不好意思,我是非常非常菜的,我看试着看了一下vs里面确实有设置好的东西了,点击就有继承了,但我还是不明白3楼的代码是用来做什么的???直接放的话有很多地方提示没引用命名空间。
烟波钓 2012-01-20
  • 打赏
  • 举报
回复
我去
你直接搞一个窗体 定制你抽象好的属性和控件(这本身就类似一个用户控件)
使用的时候实例化不同的对象不就ok?
gx176539813 2012-01-20
  • 打赏
  • 举报
回复
继承类不就好了。方法都有了
桂花 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chinajiyong 的回复:]

引用 2 楼 xuchonglei 的回复:

继承...重写

是的,重写Form,给点思路
C# code

#region 重写方法
protected override void OnInvalidated(InvalidateEventArgs e)
{
SetReion();
SystemBt……
[/Quote]你这段代码是放在子窗口里面的?
EnForGrass 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuchonglei 的回复:]

继承...重写
[/Quote]
是的,重写Form,给点思路

#region 重写方法
protected override void OnInvalidated(InvalidateEventArgs e)
{
SetReion();
SystemBtnSet();
base.OnInvalidated(e);

}

//重绘窗口
protected override void OnPaint(PaintEventArgs e)
{
try
{
g = e.Graphics;
g.DrawIcon(this.Icon, new Rectangle(12, 12, 16, 16));
g.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), 32, 12);
g.SmoothingMode = SmoothingMode.HighQuality; //高质量
g.PixelOffsetMode = PixelOffsetMode.HighQuality; //高像素偏移质量
ImageDrawRect.DrawRect(g, _BacklightImg, ClientRectangle, Rectangle.FromLTRB(_BacklightLTRB.X, _BacklightLTRB.Y, _BacklightLTRB.Width, _BacklightLTRB.Height), 1, 1);
}
catch
{ }
}
//重载WndProc方法
protected override void WndProc(ref Message m)
{
try
{
switch (m.Msg)
{
//窗体客户区以外的重绘消息,一般是由系统负责处理
case Win32.WM_NCPAINT:
break;
//画窗体被激活或者没有被激活时的样子//http://blog.csdn.net/commandos/archive/2007/11/27/1904558.aspx
case Win32.WM_NCACTIVATE:
if (m.WParam == (IntPtr)Win32.WM_FALSE)
{
m.Result = (IntPtr)Win32.WM_TRUE;
}
break;
//在需要计算窗口客户区的大小和位置时发送。通过处理这个消息,应用程序可以在窗口大小或位置改变时控制客户区的内容
case Win32.WM_NCCALCSIZE:
break;
//鼠标移动,按下或释放都会执行该消息
case Win32.WM_NCHITTEST:
WM_NCHITTEST(ref m);
break;
default:
base.WndProc(ref m);
break;
}
}
catch { }
}


#endregion
Tim_Andy 2012-01-18
  • 打赏
  • 举报
回复
继承...重写
快乐大法师 2012-01-18
  • 打赏
  • 举报
回复
定义一个全局变量不就行了么

111,120

社区成员

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

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

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