TableLayoutPanel打印时第三列右对齐不生效及全列右对齐问题求助
问题原因与解决方案
为什么之前设置Label的TextAlign属性打印不生效
你在Label上设置的TextAlign是WinForm控件在界面渲染时的文本对齐规则,而打印环节你是通过Graphics.DrawString手动绘制文本,这个方法不会自动读取控件的对齐属性,完全由你传入的StringFormat参数决定对齐方式,所以之前的控件对齐配置在打印时不会生效。
仅让第三列右对齐的调整方案
你只需要在循环中先判断当前控件所在的TableLayoutPanel列索引,不同列使用不同的StringFormat配置即可,第三列的列索引为2(列从0开始计数),参考代码如下:
' 先定义两种对齐规则 Dim sfLeft As New StringFormat() With {.Alignment = StringAlignment.Near} ' 左对齐 Dim sfRight As New StringFormat() With {.Alignment = StringAlignment.Far} ' 右对齐 For Each ctrl As Control In TableLayoutPanel.Controls ' 获取当前控件所在的列索引 Dim colIndex As Integer = TableLayoutPanel.GetColumn(ctrl) ' 根据列选择对应的对齐格式 Dim usedSF = If(colIndex = 2, sfRight, sfLeft) e.Graphics.DrawString(ctrl.Text, ctrl.Font, Brushes.Black, Panel.PointToClient(TableLayoutPanel.PointToScreen(ctrl.Bounds.Location)), usedSF) Next
注意你已经给Label设置了
Dock = DockStyle.Fill,控件的Bounds宽度和单元格宽度一致,所以按上面的逻辑绘制就能实现前两列左对齐、第三列右对齐的需求。
内容的提问来源于stack exchange,提问作者Desz
相关产品推荐
相关产品推荐

