【问题标题】:Custom control components setting position C#自定义控件组件设置位置 C#
【发布时间】:2011-07-30 19:43:23
【问题描述】:

我有自定义控件-使用包含四个文本框的 Win Forms,都具有关闭或打开它们的属性-我只是在它们上设置可见参数。 我想更改自定义控件的大小和位置 - 例如,当我关闭第一个文本框时,我想更改他下方所有 3 个组件的位置,以使它们更高。 当然,我想与每个 TextBox 一起工作 - 每个 TextBoxes,在我正在改变位置的 TextBox 下方,都应该改变位置。

我无法通过在其自己的属性中更改 TextBox 的位置来实现它 - 我可以询问我上面的 TextBox,如果它的属性设置为 on 或 of,但它不起作用,因为我不知道设置属性的顺序在应用程序中。

我可以更改我下方 TextBox 的位置 - 在 Top 文本框的属性中,但我可以只使用下面的一个 TextBox 来做到这一点,我不知道也无法找出,如果下面的两个 TextBox 没有关闭并且第四个 TextBox 应该是在第二的位置。

我不能通过使用一些变量来改变它 - 当我改变它时,其他 TextBoxes 不关心它并且他们之前已经设置了它们的位置。

那么你知道我该如何实现它吗?

【问题讨论】:

  • 您使用的是 WPF 还是 Win Forms?
  • 对不起,我忘记了 - 我正在使用 Win Forms
  • 添加我在第一行使用 Win 表单句子。它会帮助喜欢帮助你的人。

标签: c# winforms custom-controls positioning


【解决方案1】:

FlowLayoutPanel 正是为这种行为而设计的。将您的文本框放在 FlowLayoutPanel 中,然后当您将其中一个或多个的可见属性设置为 false 时,其他文本框将自动向上移动(如果您设置了它,则将自动向上移动)。

【讨论】:

    【解决方案2】:

    如果您出于某种原因想要手动操作,只需创建一个控制链即可。

    public class CustomTextBox
    {
    public CustomTextBox(CustomTextBox previousSibling)
    {
        PreviousSibling = previousSibling;
    }
    
    public CustomTextBox PreviousSibling { get; private set; }
    
    public CustomTextBox PreviousVisibleSibling
    {
        get
        {
            if (PreviousSibling == null)
            {
                return null;
            }
            return PreviousSibling.Visible ? PreviousSibling : PreviousSibling.PreviousVisibleSibling
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 2013-04-13
      • 1970-01-01
      相关资源
      最近更新 更多