我最近开始熟悉Visual Studio 2010和C#进行实习。 C#不包含内置的InputBox函数,所以我创建了自己的表单,带有文本框,两个按钮和一个简单的标签。
我有一个函数设置允许程序员以常规格式调用表单(用户通过文本框输入输入)或是/否格式(表单只显示问题以及是和否按钮) 。
当我切换到是/否格式时,我想以编程方式居中标签。我一直在使用代码:
labelNote.Left = inputBox.Left + (inputBox.Width / 2) - (labelNote.Width / 2);
这应该将音符的中心放在表格的中心。但是,如果标签的内容发生更改(使新标签更长或更短),则不会更新属性以反映新大小。除非包含原始文本,否则它不会居中。有没有办法强制更新?我预见这将成为将来定位对象以实现可扩展性的问题。
感谢您的时间
答案 0 :(得分:0)
我假设你在actionlistener中有尺寸。特别是表单'调整大小动作监听器。然后,只要调整表单大小,就会调用它,并调用所有代码。然后从其他地方强制更新,你只需要调用actionlistener。
的ActionListener:
Private Sub formName_Resize(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Resize
调用actionlistener:
formName_Resize(sender, e)
答案 1 :(得分:0)
好吧,你可以将一个事件附加到Label.TextChanged
。坦率地说,最好更改TextAlign
或类似的东西:尝试以声明方式执行布局,而不是通过代码显式执行。这往往会使事情变得更好。
我发现[TableLayoutPanel
] 1控件相当容易使用 - 大部分时间(偶尔会有完全的痛苦)。
答案 2 :(得分:0)
事实证明,我犯了一个愚蠢的错误(在调试中我是一个常见的主题。真正的小东西在最长的时间内没被注意到)。
标签尺寸调整不是问题。问题是我更改了标签内容的顺序,然后调用函数来计算其新位置。我首先调用位置计算,因此它根据旧内容找到了标签居中的位置。我没注意这么久,因为文字正在改变。我理所当然地认为函数是按照正确的顺序调用的。
因此,如果有疑问,请检查您编写代码的顺序。无论如何,谢谢你的帮助,大家。我最终发现了一些可能适用于其他场景的整洁事物(例如Graphics类中的MeasureString函数)。