c# 窗体切换子页面

失落的神庙 2012-08-10 02:35:34
最近有很多淫问了关于窗体切换子页面的问题
闪。是主要的一个问题
我帖一下我的窗体切换

using System;
using System.Collections.Generic;
using System.Text;

using System.Windows.Forms;
using System.Drawing;
using System.Runtime.InteropServices;

namespace DCUI
{
/// <summary>
/// 加载Tab页样式和事件
/// </summary>
public class m_DisTabImg
{
/// <summary>
/// 显示Tab页----容器tag保存当前显示索引
/// </summary>
/// <param name="SetForm">窗体</param>
/// <param name="AddFormContrl">加载窗体控件容器</param>
/// <param name="AddForm">加载的form集合</param>
/// <param name="TabImg">图片(原始、选中、经过)</param>
/// <param name="TabText">显示文字</param>
/// <param name="TabTextColor">文字三种颜色(原始、选中、经过)可为空</param>
/// <param name="TabStartPoint">开始坐标</param>
/// <param name="TabSpacing">各Tab页间距</param>
/// <param name="FormKey">钥匙</param>
/// <returns>设置是否成功</returns>
public static bool SetTabImg
(
Form SetForm//窗体
,Control AddFormContrl//加载窗体控件容器
,Form[] AddForm//加载的form
,List<Image[]> TabImg//图片(原始、选中、经过)
,string[] TabText//显示文字
, Color[] TabTextColor//文字三种颜色(原始、选中、经过)
,Point TabStartPoint//开始坐标
, int TabSpacing//各Tab页间距
)
{
List<Label> TabPags_labl = new List<Label>();

if (!(AddForm.Length == TabImg.Count && TabImg.Count == TabText.Length))
return false;
AddForm[0].Tag = 0;

//加载所有窗体
foreach (Form i in AddForm)
{
i.FormBorderStyle = FormBorderStyle.None;
i.Dock = DockStyle.Fill;
i.TopLevel = false;
i.Visible = false;
AddFormContrl.Controls.Add(i);
}

for (int i = 0; i < TabText.Length; i++)
{
Label TabImg_lable = new Label();

TabImg_lable.Tag = i;//i

#region 排版
TabImg_lable.AutoSize = false;
TabImg_lable.TextAlign = ContentAlignment.BottomCenter;
if (TabTextColor != null && TabTextColor.Length == TabText.Length * 3)
TabImg_lable.ForeColor = TabTextColor[i * 3];
TabImg_lable.Location = new Point(TabStartPoint.X + i * (TabSpacing + TabImg[Convert.ToInt32(TabImg_lable.Tag)][0].Width), TabStartPoint.Y);
TabImg_lable.Text = TabText[i];
if (TabImg[i].Length > 1)
{
TabImg_lable.Width = TabImg[i][0].Width;
TabImg_lable.Height = TabImg[i][0].Height;
if (Convert.ToInt32(TabImg_lable.Tag) == 0 && i == 0)
TabImg_lable.Image = TabImg[0][1];
else
TabImg_lable.Image = TabImg[i][0];
}
#endregion

TabImg_lable.Click += delegate
{
AddForm[0].Tag = Convert.ToInt32(TabImg_lable.Tag);//i
if (TabImg[Convert.ToInt32(TabImg_lable.Tag)].Length > 2)
{
TabImg_lable.Image = TabImg[Convert.ToInt32(TabImg_lable.Tag)][1];
try
{
UnLockUnCheckTab(Convert.ToInt32(AddForm[0].Tag), TabPags_labl.ToArray(), TabImg);
}
catch { }
}
if (TabTextColor != null && TabTextColor.Length == TabText.Length * 3)
TabImg_lable.ForeColor = TabTextColor[Convert.ToInt32(TabImg_lable.Tag) * 3 + 1];
if (AddForm[Convert.ToInt32(TabImg_lable.Tag)] != null)
{
AddForm[Convert.ToInt32(TabImg_lable.Tag)].Visible = true;
for (int f = 0; f < AddForm.Length; f++)
{
if (f == Convert.ToInt32(TabImg_lable.Tag))
continue;
AddForm[f].Visible = false;
}
}
};
if (TabImg[i].Length > 0)
TabImg_lable.MouseMove += delegate
{
if (Convert.ToInt32(AddForm[0].Tag) != Convert.ToInt32(TabImg_lable.Tag))//i
{
if (TabTextColor != null && TabTextColor.Length == TabText.Length * 3)
TabImg_lable.ForeColor = TabTextColor[Convert.ToInt32(TabImg_lable.Tag) * 3 + 2];
TabImg_lable.Image = TabImg[Convert.ToInt32(TabImg_lable.Tag)][2];
}
};
if (TabImg[i].Length > 2)
TabImg_lable.MouseLeave += delegate
{
if (Convert.ToInt32(AddForm[0].Tag) != Convert.ToInt32(TabImg_lable.Tag))//i
{
if (TabTextColor != null && TabTextColor.Length == TabText.Length * 3)
TabImg_lable.ForeColor = TabTextColor[Convert.ToInt32(TabImg_lable.Tag) * 3];
TabImg_lable.Image = TabImg[Convert.ToInt32(TabImg_lable.Tag)][0];
}
};

TabPags_labl.Add(TabImg_lable);
SetForm.Controls.Add(TabImg_lable);
TabImg_lable.BringToFront();
}
//初始化显示
//AddFormContrl.Controls.Clear();
if (AddForm.Length > 0)
{
AddForm[0].Visible = true;
}
return true;
}

/// <summary>
/// 还原未选中Tab页背景
/// </summary>
/// <param name="CheckedIndex">选中项索引</param>
/// <param name="Tabs">所有Tab页 不能为空</param>
/// <param name="TabsImg">所有Tab页图片 不能为空</param>
/// <returns>设置是否成功</returns>
public static bool UnLockUnCheckTab(int CheckedIndex,Label[] Tabs,List<Image[]> TabsImg)
{
try
{
for (int i = 0; i < Tabs.Length; i++)
{
if (Convert.ToInt32(Tabs[i].Tag) != CheckedIndex)
{
if (TabsImg[i].Length > 0)
Tabs[i].Image = TabsImg[i][0];
}
}
return true;
}
catch { return false; }
}


//未完

...全文
223 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落的神庙 2012-08-10
  • 打赏
  • 举报
回复
//接上

/// <summary>
/// 显示Tab页(lable已经设置好大小和文字排版)----容器tag保存当前显示索引
/// </summary>
/// <param name="SetForm">窗体</param>
/// <param name="TabImg">图片(原始、选中、经过)</param>
/// <param name="TabLale">tab页 lable集合</param>
/// <param name="TabTextColor">文字三种颜色(原始、选中、经过)可为空</param>
/// <param name="TabStartPoint">开始坐标</param>
/// <param name="TabSpacing">各Tab页间距</param>
/// <param name="totag">当前显示窗体索引</param>
/// <param name="FormKey">钥匙</param>
/// <returns>设置是否成功</returns>
public static bool SetTabImg
(
Form SetForm//窗体
, List<Image[]> TabImg//图片(原始、选中、经过)
,Label[] TabLale//tab页 lable集合
,Label[] TxtLabel
,int lblWidth//lable宽度
,int lblHeight//label高度
, Color[] TabTextColor//文字三种颜色(原始、选中、经过)
, Point TabStartPoint//开始坐标
, int TabSpacing//各Tab页间距
,Label totag
)
{

if (TabLale == null || TabLale.Length == 0 || TxtLabel == null)
return false;
totag.Tag = 0;

for (int i = 0; i < TabLale.Length; i++)
{
Label TabImg_lable = TabLale[i];
Label Txt_label = TxtLabel[i];

TabImg_lable.Tag = i; //i

//鼠标经过事件
if (TabImg[i].Length > 0)
{
TabImg_lable.MouseMove += delegate
{
if (Convert.ToInt32(totag.Tag) != Convert.ToInt32(TabImg_lable.Tag))//i
{
TabImg_lable.Image = TabImg[Convert.ToInt32(TabImg_lable.Tag)][2];
}
};
Txt_label.MouseMove += delegate
{
if (Convert.ToInt32(totag.Tag) != Convert.ToInt32(TabImg_lable.Tag))//i
{
if (TabTextColor != null && TabTextColor.Length == TxtLabel.Length * 3)
Txt_label.ForeColor = TabTextColor[Convert.ToInt32(TabImg_lable.Tag) * 3 + 2];
TabImg_lable.Image = TabImg[Convert.ToInt32(TabImg_lable.Tag)][2];
}
};
}

//鼠标离开事件
if (TabImg[i].Length > 2)
{
TabImg_lable.MouseLeave += delegate
{
if (Convert.ToInt32(totag.Tag) != Convert.ToInt32(TabImg_lable.Tag))//i
{
if (TabTextColor != null && TabTextColor.Length == TabLale.Length * 3)
TabImg_lable.ForeColor = TabTextColor[Convert.ToInt32(TabImg_lable.Tag) * 3];
TabImg_lable.Image = TabImg[Convert.ToInt32(TabImg_lable.Tag)][0];
}
};
Txt_label.MouseLeave += delegate
{
if (Convert.ToInt32(totag.Tag) != Convert.ToInt32(TabImg_lable.Tag))//i
{
if (TabTextColor != null && TabTextColor.Length == TabLale.Length * 3)
Txt_label.ForeColor = TabTextColor[Convert.ToInt32(TabImg_lable.Tag) * 3];
TabImg_lable.Image = TabImg[Convert.ToInt32(TabImg_lable.Tag)][0];
}
};
}
}
return true;
}

[DllImport("user32")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
private const int WM_SETREDRAW = 0xB;
}
}

//PS:
SendMessage(AddClientContrl.Handle, WM_SETREDRAW, 1, IntPtr.Zero);//关闭AddClientContrl控件重绘
//必要条件。如果是panel 得先关掉显示滚动条 需要重绘的时候再开启显示滚动条 其余控件的滚动条我暂时还没测试,如果不关闭,则不关闭该控件重绘

SendMessage(AddClientContrl.Handle, WM_SETREDRAW, 1, IntPtr.Zero);//开启AddClientContrl控件重绘
AddClientContrl.Refresh();//重绘AddClientContrl控件

//以上API可以基本满足个别对UI很挑剔的人使用

110,552

社区成员

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

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

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