-
winform如何重写控件
- 时间:2024-11-23 07:46:51
大家好,今天Win10系统之家小编给大家分享「winform如何重写控件」的知识,如果能碰巧解决你现在面临的问题,记得收藏本站或分享给你的好友们哟~,现在开始吧!
1.WinForm中DataGridView控件重写实现自定表头样式
单独建一个类:
public class dgvheaderunite
{
public string rowvalue;//重新绘制的文本框内容
public int col1height, col2height;//第一行行高,第二行行高
private static sortedlist rowspan = new sortedlist();//取得需要重新绘制的单元格
private static sortedlist valuelist = new sortedlist();
///
///
/// datagridview合并单元格(横向)
///
/// 绘制的datagridview
/// 绘制单元格的参数(datagridview的cellpainting事件中参数)
/// 起始单元格在datagridview中的索引号
/// 结束单元格在datagridview中的索引号
/// 重新绘制的文本框内容
public void meragerowspan(datagridview dgv, datagridviewcellpaintingeventargs cellargs, int mincolindex, int maxcolindex)
{
if (cellargs.columnindex < mincolindex="" ||="" cellargs.columnindex=""> maxcolindex) return;
rectangle rect = new rectangle();
if (rowspan[cellargs.columnindex] == null)
{
//首先判断当前单元格是不是需要重绘的单元格
//保留此单元格的信息,并抹去此单元格的背景
rect.x = cellargs.cellbounds.x;
rect.y = cellargs.cellbounds.y;
rect.width = cellargs.cellbounds.width;
rect.height = cellargs.cellbounds.height;
rowspan.add(cellargs.columnindex, rect);
valuelist.add(cellargs.columnindex, cellargs.value.tostring());
if (cellargs.columnindex == maxcolindex)
merageprint(dgv, cellargs, mincolindex, maxcolindex);
}
else
{
ispostmerage(dgv, cellargs, mincolindex, maxcolindex);
}
}
///
/// 不是初次单元格绘制
///
///
///
///
///
public void ispostmerage(datagridview dgv, datagridviewcellpaintingeventargs cellargs, int mincolindex, int maxcolindex)
{
//比较单元是否有变化
rectangle rectargs = (rectangle)rowspan[cellargs.columnindex];
if (rectargs.x != cellargs.cellbounds.x || rectargs.y != cellargs.cellbounds.y
|| rectargs.width != cellargs.cellbounds.width || rectargs.height != cellargs.cellbounds.height
|| valuelist[cellargs.columnindex] != cellargs.value.tostring())
{
rectargs.x = cellargs.cellbounds.x;
rectargs.y = cellargs.cellbounds.y;
rectargs.width = cellargs.cellbounds.width;
rectargs.height = cellargs.cellbounds.height;
rowspan[cellargs.columnindex] = rectargs;
valuelist[cellargs.columnindex] = cellargs.value.tostring();
}
if (cellargs.columnindex == maxcolindex)
merageprint(dgv, cellargs, mincolindex, maxcolindex);
//merageprint(dgv, cellargs, mincolindex, maxcolindex);
}
//绘制单元格
private void merageprint(datagridview dgv, datagridviewcellpaintingeventargs cellargs, int mincolindex, int maxcolindex)
{
int width = 0;//合并后单元格总宽度
int height = cellargs.cellbounds.height;//单元格高度
for (int i = mincolindex; i <= maxcolindex;="" i++)="" width="" +="((rectangle)rowspan[i]).width;" 合并单元格的位置信息="" rectangle="" rebounds="new" rectangle();="" rebounds.x="((rectangle)rowspan[mincolindex]).x;" rebounds.y="((rectangle)rowspan[mincolindex]).y;" rebounds.width="width;" rebounds.height="height;" using="" (brush="" gridbrush="new" solidbrush(dgv.gridcolor),="" backcolorbrush="new" solidbrush(cellargs.cellstyle.backcolor),="" lightbrush="new" solidbrush(systemcolors.controllightlight)="" )="" {="" 抹去原来的cell背景="" cellargs.graphics.fillrectangle(backcolorbrush,="" rebounds);="" using="" (pen="" gridlinepen="new" pen(gridbrush),="" lightlinepen="new" pen(lightbrush))="" {="" 画出边线="" point="" blpoint="new" point(rebounds.left,="" rebounds.bottom="" -="" 1);//底线左边位置="" point="" brpoint="new" point(rebounds.right="" -="" 1,="" rebounds.bottom="" -="" 1);//底线右边位置="" cellargs.graphics.drawline(gridlinepen,="" blpoint,="" brpoint);//下边线="" point="" tlpoint="new" point(rebounds.left,="" rebounds.top);//上边线左边位置="" point="" trpoint="new" point(rebounds.right,="" rebounds.top);//上边线右边位置="" cellargs.graphics.drawline(gridlinepen,="" tlpoint,="" trpoint);="" 上边线="" point="" tlpoint2="new" point(rebounds.left,="" rebounds.top="" +="" 1);//上边线左边位置="" point="" trpoint2="new" point(rebounds.right,="" rebounds.top="" +="" 1);//上边线右边位置="" cellargs.graphics.drawline(lightlinepen,="" tlpoint2,="" trpoint2);="" 上边白线="" point="" mlpoint="new" point(rebounds.left="" +="" 1,="" rebounds.top="" +="" col1height);//中间线左边位置="" point="" mrpoint="new" point(rebounds.right="" -="" 5,="" rebounds.top="" +="" col1height);//中间线右边位置="" cellargs.graphics.drawline(gridlinepen,="" mlpoint,="" mrpoint);//中间线="" point="" mlpoint2="new" point(rebounds.left="" +="" 1,="" rebounds.top="" +="" col1height="" +="" 1);//中间线左边位置="" point="" mrpoint2="new" point(rebounds.right="" -="" 5,="" rebounds.top="" +="" col1height="" +="" 1);//中间线右边位置="" cellargs.graphics.drawline(lightlinepen,="" mlpoint2,="" mrpoint2);//中间白线="" point="" rtpoint1="new" point(rebounds.right="" -="" 2,="" rebounds.top="" +="" 5);//右边线顶部位置="" point="" rbpoint1="new" point(rebounds.right="" -="" 2,="" rebounds.bottom="" -="" 5);//右边线底部位置="" cellargs.graphics.drawline(gridlinepen,="" rtpoint1,="" rbpoint1);="" 右边线="" point="" rtpoint2="new" point(rebounds.right="" -="" 1,="" rebounds.top="" +="" 5);//右边线顶部位置="" point="" rbpoint2="new" point(rebounds.right="" -="" 1,="" rebounds.bottom="" -="" 6);//右边线底部位置="" cellargs.graphics.drawline(lightlinepen,="" rtpoint2,="" rbpoint2);="" 右边白线="" 计算绘制字符串的位置="" sizef="" sf="cellargs.graphics.measurestring(rowvalue," cellargs.cellstyle.font);="" float="" lstr="(width" -="" sf.width)="" 2;="" float="" rstr="(col1height" -="" sf.height)="" 2;="" 画出文本框="" if="" (rowvalue="" !="" )="" {="" cellargs.graphics.drawstring(rowvalue,="" cellargs.cellstyle.font,="" new="" solidbrush(cellargs.cellstyle.forecolor),="" rebounds.left="" +="" lstr,="" rstr="" +="" 3,="" stringformat.genericdefault);="" }="" for="" (int="" i="mincolindex;" i=""></=><= maxcolindex;="" i++)="" {="" sf="cellargs.graphics.measurestring(valuelist[i].tostring()," cellargs.cellstyle.font);="" rectangle="" rect="(rectangle)rowspan[i];" rect.y="" +="col1height;" rect.height="col2height;" stringformat="" strfmt="new" stringformat();="" strfmt.alignment="stringalignment.center;" strfmt.linealignment="stringalignment.center;" if="" (i=""> mincolindex)
{
rtpoint1 = new point(rect.left - 2, rebounds.top + col1height + 3);//右边线顶部位置
rbpoint1 = new point(rect.left - 2, rebounds.bottom - 4);//右边线底部位置
cellargs.graphics.drawline(gridlinepen, rtpoint1, rbpoint1); //右边线
rtpoint2 = new point(rect.left - 1, rebounds.top + col1height + 3);//右边线顶部位置
rbpoint2 = new point(rect.left - 1, rebounds.bottom - 1 - 4);//右边线底部位置
cellargs.graphics.drawline(lightlinepen, rtpoint2, rbpoint2); //右边白线
}
cellargs.graphics.drawstring(valuelist[i].tostring(), cellargs.cellstyle.font,
new solidbrush(cellargs.cellstyle.forecolor),
rect,
strfmt);
}
}
cellargs.handled = true;
}
}
在程序里这样调用:
private void dgv1_cellpainting(object sender, datagridviewcellpaintingeventargs e)
{
if (e.rowindex == -1 && ((e.columnindex == 2) || (e.columnindex == 3)))
{
e.cellstyle.font = new font(dgvpay.defaultcellstyle.font, fontstyle.bold);
e.cellstyle.wrapmode = datagridviewtristate.true;
dgvheaderunite headerunite = new dgvheaderunite();
headerunite.rowvalue = "预算/结算成本";
headerunite.col1height = 18;
headerunite.col2height = 36;
headerunite.meragerowspan(dgvpay, e, 2, 3);
}
if (e.rowindex == -1 && ((e.columnindex == 4) || (e.columnindex == 5) || (e.columnindex == 6)))
{
e.cellstyle.font = new font(dgvpay.defaultcellstyle.font, fontstyle.bold);
e.cellstyle.wrapmode = datagridviewtristate.true;
dgvheaderunite headerunite = new dgvheaderunite();
headerunite.rowvalue = "付款明细";
headerunite.col1height = 18;
headerunite.col2height = 36;
headerunite.meragerowspan(dgvpay, e, 4, 6);
}
}
你可以试试</=>
以上就是关于「winform如何重写控件」的全部内容,本文讲解到这里啦,希望对大家有所帮助。如果你还想了解更多这方面的信息,记得收藏关注本站~
【此文★为Win10系统之家Www.gHoSt580.net★文章,转载请注明出处!】
相关文章
-
1.WinForm中DataGridView控件重写实现自定表头样式单独建一个类:publicclassdgvheaderunite{publicstringrowvalue;//重新绘制的文本框内容publicintcol1height,col2height;//第一行行高,第二行行高privatestaticsor...
-
1.如何添加ActiveX控件请打开需要添加ActiveX控件的工作表。显示“控件工具箱”,指向“视图”菜单上的“工具栏”,再单击“控件工具箱”。单击要添加的控件。在工作表上要放置控件的位置单击。将控件拖动到所需的大小。如果要添加...
-
1.Excel表单控件和ACTIVEX控件有什么区别表单控件表单控件是与早期版本的Excel(从Excel5.0版开始)兼容的原始控件。表单控件还适于在XLM宏工作表中使用。如果您希望在不使用VBA代码的情况下轻松引用单元格数据并与其进...
-
1.java关于方法重写hashcodeequals如何重写toString方法既然Object是所有类的顶级父类,那么在Object中定义的方法所有的类都具备。其中之一就是toStirng()方法。StringtoString():该方法java希望我们重写时返回一个字...