找回密码
 立即注册

QQ登录

只需一步,快速开始

小格

中级会员

6

主题

12

帖子

780

积分

中级会员

积分
780

活字格认证

小格
中级会员   /  发表于:2014-11-28 18:35  /   查看:11767  /  回复:10
请问,为什么

                    C1.Win.C1FlexGrid.CellBorder cb = myFlex.GetCellStyle(i, j).Border;
                    cb.Direction = BorderDirEnum.Both;
                    cb.Color = Color.Black;
画出来的边框,没有上边框和左边框,请指教!!

10 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-12-1 10:22:00
沙发
回复 1楼小格的帖子

单元格是叠加的,推测这个单元格的边框被其他单元格边框压住了。

两种解决方案。
一种是将其周边的单元格的相关边框也设置为相同线形。
第二种是将C1FlexGrid的DrawMode设置为OwnerDraw,然后再OwnerDraw事件里重画Cell的边框。
代码参考:
  1.         void c1FlexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
  2.         {
  3.             if (e.Row == 2 && e.Col == 2)
  4.             {
  5.                 e.Graphics.DrawRectangle(Pens.Blue, e.Bounds);
  6.                 e.DrawCell(DrawCellFlags.All);
  7.             }
  8.         }
复制代码

评分

参与人数 1满意度 +5 收起 理由
小格 + 5 非常好!!!

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
jackywangyu
初级会员   /  发表于:2014-12-2 10:52:00
板凳
接着这个问题,请问如何实现选中某行,这行整体显示为一个选中框?这样能做吗?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-12-2 17:22:00
地板
回复 3楼jackywangyu的帖子

应该可以实现。
我已经将你的需求排入列表进行实现验证,这需要点时间。最晚下班前给您回复。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-12-2 18:09:00
5#
回复 3楼jackywangyu的帖子

可以做到。主要是利用e.DrawGraphics画一个矩形框,主要是计算该矩形框的x,y,width,height。
具体代码如下:
  1. void c1FlexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
  2.         {
  3.             if (e.Row == this.c1FlexGrid1.Row)
  4.             {
  5.                 int x = this.c1FlexGrid1.Cols[0].Left;
  6.                 int y = this.c1FlexGrid1.Rows[e.Row].Top;
  7.                 int width = this.c1FlexGrid1.Cols[this.c1FlexGrid1.Cols.Count - 1].Right - this.c1FlexGrid1.Cols[0].Left;
  8.                 int height = this.c1FlexGrid1.Rows[e.Row].HeightDisplay;
  9.                 Rectangle rc = new Rectangle(x, y, width, height);
  10.                 e.Graphics.DrawRectangle(Pens.Blue, rc);
  11.             }            
  12.         }
复制代码

代码展示了将选中行的边框设置为蓝色。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
小格
中级会员   /  发表于:2014-12-2 21:37:00
6#
回复 5楼Alice的帖子

谢谢你的提示,我依据你的方法实现了单元格四条边框的任意画法,非常感谢,帮大忙了!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-12-3 11:19:00
7#
回复 6楼小格的帖子

不用客气。能帮到你真是太好了。
有问题欢迎开新帖讨论。
也欢迎你就本次回帖打分。

评分

参与人数 1满意度 +5 收起 理由
jackywangyu + 5 谢谢,问题解决。

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
jackywangyu
初级会员   /  发表于:2014-12-5 13:01:00
8#
请问是否可以设置边框的粗细和透明度?给个例子,多谢
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-12-5 14:03:00
9#
回复 8楼jackywangyu的帖子

这个接口不是我们控件提供的。e.Graphics用的是微软的Graphics方法来绘制的。
Graphics.DrawRectangle 方法可以绘制由坐标对、宽度和高度指定的矩形。具体的语法可以参考msdn:
http://msdn.microsoft.com/zh-cn/library/System.Drawing.Graphics.DrawRectangle(v=vs.110).aspx

在这个方法里有个Pen参数,它确定矩形的颜色、宽度和样式。
有关Pen类里的具体的构造函数、属性和方法。你可以参考msdn:
http://msdn.microsoft.com/zh-cn/library/system.drawing.pen(v=vs.110).aspx
比如如下代码就可以创建一个新的Pen
  1. private void ShowLineJoin(PaintEventArgs e)
  2. {

  3.     // Create a new pen.
  4.     Pen skyBluePen = new Pen(Brushes.DeepSkyBlue);
  5.     // Set the pen's width.
  6.     skyBluePen.Width = 8.0F;
  7.     // Set the LineJoin property.
  8.     skyBluePen.LineJoin = System.Drawing.Drawing2D.LineJoin.Bevel;
  9.     // Draw a rectangle.
  10.     e.Graphics.DrawRectangle(skyBluePen,
  11.         new Rectangle(40, 40, 150, 200));

  12.     //Dispose of the pen.
  13.     skyBluePen.Dispose();
  14. }
复制代码


具体的有关Graphics类你可以阅读我上面列出的文档地址,或是msdn搜索相关文档,能够帮助你更好的理解画法和解决问题。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
103374wn
注册会员   /  发表于:2017-4-27 11:16:28
10#
楼主四条边框的任意画法实现了吗?可以分享一下吗
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部