Spread Studio for Winform :实现编辑状态下文本居中
有些朋友向我提出,怎样使编辑状态下的单元格文本垂直居中显示。Spread 表格控件单元格有两种状态,编辑状态和普通显示状态。在显示状态下,我们可以通过单元格的格式相关属性来设置单元格样式、对齐方式。该功能我们需要通过自定义单元格方式实现。
实现该功能的核心代码如下:
1: public override Control GetEditorControl(Control parent, FarPoint.Win.Spread.Appearance appearance, float zoomFactor) 2: { 3: TextBox tb = new TextBox(); 4: FarPoint.Win.Spread.FpSpread spread = parent as FarPoint.Win.Spread.FpSpread; 5: float height = spread.Sheets[0].ActiveRow.Height; 6: float width = spread.Sheets[0].ActiveColumn.Width; 7: tb.Width = (int)width; 8: tb.Location = new Point(0, (int)(height / 2 - tb.Height / 2) + 2); 9: tb.Text = spread.Sheets[0].ActiveCell.Text; 10: uc = new MyEditorControl(tb); 11: uc.Height = (int)height; 12: uc.Width = (int)width; 13: return uc; 14: }
?
自定义单元格编译器由 TextBox 和 UserControl 组成。我们可以通过调整 TextBox 的位置来实现输入时文本居中。主要是通过获取当前编辑单元格的大小,来设置自定义编辑器的大小,从而确定 TextBox 的位置。
在设置单元格内容之后,我们通过以下代码返回单元格值:
1: public override object GetEditorValue() 2: { 3: return uc.Tb.Text; 4: }
?
基于 UserControl 实现的自定义编辑器代码如下:
1: public partial class MyEditorControl : UserControl 2: { 3: TextBox tb; 4: 5: public MyEditorControl(TextBox tb1) 6: { 7: this.BackColor = Color.White; 8: tb = tb1; 9: tb.BorderStyle = System.Windows.Forms.BorderStyle.None; 10: this.Controls.Add(tb); 11: } 12: public TextBox Tb 13: { 14: get { return tb; } 15: set { tb = value; } 16: } 17: }
?
效果图:
?
源码下载:VS 2010 + Spread Studio .NET 7 + .NET 4.0:点击下载?
使用控件查看地址:点击查看
?
?