能調整大小并可触發點擊事件的多行表頭
来源:互联网 发布:小米手机2a是什么网络 编辑:程序博客网 时间:2024/05/06 11:58
能調整大小并可触發點擊事件的多行表頭
原理:利用Spliter結合一棵樹來做,主要是靈活設置Dock屬性
public partial class HeadItem : Panel
{
private string text;
private Button btn ;
public HeadItem()
{
InitializeComponent();
this.Resize += new EventHandler(HeadPanel_Resize);
}
void HeadPanel_Resize(object sender, EventArgs e)
{
this.Refresh();
}
public new string Text
{
get
{
return this.text;
}
set
{
this.text = value;
}
}
protected override void OnPaint(PaintEventArgs e)
{
ControlPaint.DrawButton(e.Graphics, 1, 1, this.ClientRectangle.Width - 2, this.ClientRectangle.Height - 2, ButtonState.Normal);
StringFormat format = new StringFormat(StringFormatFlags.FitBlackBox);
e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), new PointF(0, 0),format);
base.OnPaint(e);
}
}
//--------------
public partial class Header : Panel
{
private TreeNodeCollection headCollection ;
public TreeNodeCollection HeadCollection
{
get
{
return this.headCollection;
}
set
{
this.headCollection = value;
}
}
//畫本身及子控件
private void LayoutItem(TreeNode node, Panel panel)
{
if (node == null)
{
return;
}
int count = node.Nodes.Count;
if (count == 0)//沒有子結點的情況
{
HeadItem item = new HeadItem();
item.Dock = DockStyle.Fill;
item.Text = node.Text;
panel.Controls.Add(item);
}
if (count > 0)//有子節點的情況
{
int width = panel.Width / count;
Panel bottomPn = new Panel();
bottomPn.Dock = DockStyle.Fill;
panel.Controls.Add(bottomPn);
Splitter spli = new Splitter();
spli.Height = 2; ;
spli.Dock = DockStyle.Top;
panel.Controls.Add(spli);
HeadItem item = new HeadItem();
item.Dock = DockStyle.Top;
item.Text = node.Text;
panel.Controls.Add(item);
for (int i = count - 1; i >= 0; --i)
{
if (i == count - 1)
{
//先放最右邊的那個
Panel rightPn = new Panel();
rightPn.Dock = DockStyle.Fill;
rightPn.Text = node.Text;
rightPn.Width = bottomPn.Width / count;
bottomPn.Controls.Add(rightPn);
LayoutItem(node.Nodes[i], rightPn);
}
else
{
Splitter spli2 = new Splitter();
spli2.Width = 2;
spli2.Dock = DockStyle.Left;
bottomPn.Controls.Add(spli2);
Panel leftPn = new Panel();
leftPn.Text = node.Text;
leftPn.Dock = DockStyle.Left;
leftPn.Width = bottomPn.Width / count;
bottomPn.Controls.Add(leftPn);
LayoutItem(node.Nodes[i], leftPn);
}
}
}
}
private void LayoutTree(TreeNodeCollection tree, Panel panel)
{
this.Controls.Clear();
int count = tree.Count;
for (int i = count - 1; i >= 0; --i)
{
int width = panel.Width / count;
if (i == count - 1)
{
Panel pn = new Panel();
pn.Dock = DockStyle.Fill;
pn.Width = width;
panel.Controls.Add(pn);
LayoutItem(tree[i], pn);
}
else
{
Splitter spli = new Splitter();
spli.Width = 2;
spli.Dock = DockStyle.Left;
panel.Controls.Add(spli);
Panel leftPn = new Panel();
leftPn.Text = tree[i].Text;
leftPn.Dock = DockStyle.Left;
leftPn.Width = width;
panel.Controls.Add(leftPn);
LayoutItem(tree[i], leftPn);
}
}
}
//1,集合屬性還不知道怎么做
//2,也不知道該在哪里触發LayoutTree函數,放在OnPaint不行.
//3.如何触發點擊事件還沒做
}
- 能調整大小并可触發點擊事件的多行表頭
- jQuery获取浏览器大小并绑定事件
- winform窗体大小改变触发的事件
- JS改变浏览器大小的事件
- javascript 改变窗体大小的事件处理
- 上传图片并限制图片的大小
- android WebView中图片适配屏幕大小并添加添加事件
- onInterceptTouchEvent()用于处理事件并改变事件的传递方向。
- 页面大小变化事件
- 在Resize事件强制刷新控件的大小
- javascript获取 元素大小、位置、事件发生时的坐标
- 键盘事件的调用顺序及获取键盘大小
- 键盘事件的调用顺序及获取键盘大小
- Android 部分文字颜色大小点击事件的处理
- 没有标题栏并可以调整大小的窗体
- javascript实现div的拖动并调整大小
- Python 遍历目录并打印出子目录的大小
- js中解析日期类型的数据,并比较大小
- 新手编内核
- 在ASP.NET WebService 中如何使用 WebMethod 属性
- Eval和Bind的区别
- 对比一下年薪1万10万和100万的生活
- MFC下CSocket编程详解
- 能調整大小并可触發點擊事件的多行表頭
- SOA和SAAS的理解
- JavaScript 实用脚本,很好,珍藏起来[转贴]
- 程序与生活
- 求一无向图G中所有环
- jsp单文件上传
- ScrewTurnWiki 的 URLRewrite影响其它网站的地址之解决
- BI 与 KPI/BSC
- jsp多文件同时上传