【问题标题】:How to determine width of a windows forms controls whose width was increased because it is Anchored?如何确定宽度增加的窗口窗体控件的宽度,因为它是锚定的?
【发布时间】:2010-01-15 22:37:33
【问题描述】:

我目前在一个Windows Forms上有一个Textbox,我需要在Textbox的右边动态添加一个PictureBox框控件。

我以编程方式创建图片框,并且在设置图片框的位置时,我的设置如下:

pBox.Location = new Point(tbControl.Location.X + ctrl.Width, ctrl.Location.Y);

所以我将图片框设置在文本框的 X 位置加上文本框的宽度。但是,由于文本框的锚属性设置为 right,因此其宽度会增加以填充其自身和表单边框之间的空间。

问题是,即使文本框的宽度在视觉上大于 Textbox.Width 的实际值。 Width 属性没有考虑被锚定的额外宽度。

我已经尝试过 Textbox.Bounds.Width、Textbox.ClientSize.Width、Textbox.DisplayRectangle.Width 等属性,但没有成功。所有这些属性都返回控件的原始宽度,而不考虑由于 Anchor 属性而调整大小的宽度。

有谁知道我如何确定文本框的实际大小?谢谢

【问题讨论】:

    标签: winforms


    【解决方案1】:

    Width 属性始终跟踪控件的当前宽度,无论它是否已锚定。但是,当您使容器变大时,TextBox 将会增长,这将使其与 PictureBox 重叠。您还必须将 PB 固定在右侧。

    【讨论】:

    • nobugz,我不认为锚定 PB 是正确的方法,因为这会增加其宽度而不是移动 PB 的起点。我只需要找到一种方法来添加 PB,直到文本框展开后
    • 不,只有在两侧锚定时才会增加宽度。仅锚点在右侧。
    • 你是对的 nobugz!将 PB 固定在右侧就可以了。非常感谢。
    • 这就是我喜欢 StackOverflow 的原因。
    【解决方案2】:

    这些应该返回调整后的大小。要么您指的是错误的文本框,要么您在实际更改大小之前进行查询。

    【讨论】:

    • 我认为你是对的 John...这很奇怪,因为我认为控件在显示表单之前已展开(当我打开新表单时,我的程序已经最大化) ,但似乎我添加控件的过程是在扩展文本框之前发生的。关于如何在控件锚定后实现它的任何想法?
    • 如果你订阅了 SizeChanged 通知,那应该已经够晚了。
    • 嘿约翰。 nobugz 的解决方案有效,但我很好奇你建议的方法(为了学习)。您的意思是在文本框的 SizeChanged 事件中重绘或重新定位图片框吗?
    • 我的意思是等待文本框上的 SizeChanged 通知,然后再询问它的宽度。但无论如何,nobugz 的建议是一个更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多