2012-08-09 59 views
2

我正在写一个Windows窗体应用程序有很多文本框。我想在文本框中添加一个标签或标题,以便我不必将大量标签拖到表单上并处理定位等。到目前为止,我已经找到了2种可能的方式来完成此操作。将标签添加到文本框自定义用户控件在WinForm

  1. 创建一个标签和文本框的用户控件。根据输入的 文本,我如何获得 控件,标签和文本框的大小,因为控件可以重复使用,并且会输入不同的文本大小。如何让文本框的所有属性和事件保持不变。

  2. 扩展一个普通的文本框并添加一个名为label或 标题的字符串属性,并在文本框的左侧显示该属性。我知道 这可以在CSS.Web.UI中完成,但它可能在winform 以及如何?

任何关于如何做这些的建议? 谢谢。

+0

在某些情况下,我的同事喜欢使用垂直标记的文本框(即标签位于文本框的顶部,而不是左侧),这正是因为这样可以避免关于对标签进行右对齐的问题。 – 2012-08-09 18:51:33

回答

3

您可以创建一个包含标签和文本框的UserControl。将用户控件添加到表单时,标签和文本框将同时添加。您可以公开标签和文本框的属性以在设计或运行时分配值。

使用此方法,您可以添加多个用户控件来标准化布局。至于基于文本调整控件大小,您必须订阅事件并手动更改大小。

例如,您可以订阅标签和文本框的TextChanged事件。事件触发时,计算字符串的大小,然后相应地调整控件的宽度和位置。

+1

在计算文本大小时,请使用TextRenderer.MeasureText方法:http://msdn.microsoft.com/en-us/library/8wafk2kt.aspx,替代方法是,Graphics.MeasureString对我来说工作得不是很好。 – 2012-08-09 18:46:03

+0

@ jskiles1是否可以在不编写代码的情况下公开文本框的所有属性?我基本上希望文本框执行与以前一样的功能。 – 2012-08-09 19:40:20

+0

@dat_girl在将其添加到UserControl后,将文本框的“Modifier”属性更改为“public”。 – 2012-08-09 19:43:09

0

如果您的文字框太多,我建议切换到DataGridView。 GridView组件非常适合您所描述的内容,但它当然需要您接受网格布局。使用GridView的一个奖励很难体会,直到你看到它在行动中:它一次只创建一个HWINDOW(两个,如果你处于编辑模式)。如果您在表单上创建标签和文本框,则每个标签和文本框都将作为HWINDOW对象在操作系统中注册。所有这些HWINDOW对象都需要时间来显示!在.NET 1.0中,WinForms非常慢,包含超过二十多个控件的对话框无法使用。尽管.NET 2.0在这方面的表现要好得多,但通过使用管理大量数据的单个控件,而不是每个管理一个数据的大量控件,您仍然可以获得更好的性能。

哦,还有另一种选择,如果你喜欢的话:你也可以试试PropertyGrid。它的优点是它也会显示帮助,并允许您为每个元素创建复杂的编辑控件。

相关问题