【问题标题】:How to programmatically move a control defined with the Windows Form Designer如何以编程方式移动使用 Windows 窗体设计器定义的控件
【发布时间】:2012-11-08 10:28:46
【问题描述】:

我认为这很奇怪。我有一个使用窗体设计器创建的屏幕(Windows 窗体)。我现在想根据某些或其他标准以编程方式更改其中一个控件的宽度,即在运行时。

我的问题是我似乎无法做到这一点。我的方法是在表单类 InitializeComponent() 方法执行后(比如在表单构造函数的末尾)为 Width 属性分配一个新值。手表显示控件属性已更改,但随后显示的屏幕会忽略新值并使用 InitializeComponent() 中分配的值。

我在尝试做一些不可能的事情吗?后台是否有一些巫术阻止了设计师创建的控件,或者我只是以错误的方式处理它?

【问题讨论】:

  • 您需要将您尝试过的代码发布到 A. 提供您想要做什么的示例。 B. 所以我们可以看到你哪里出错了......
  • 请添加您的代码,您现在可以更改宽度
  • 我该怎么做?它非常大,所以我无法添加为评论
  • 这是精简的表单构造函数: public Sc​​reenEditor() { // // Windows 表单设计器支持所需 // InitializeComponent(); this.InitializeDesignHost(); .... this.panel2.Width = 1000; this.panel2.Invalidate(); } panel1 占据表单的宽度,锚定底部,左侧 panel2 包含在 panel1 中,占据了 panel1 和左半部分的整个高度,并且锚定在顶部和左侧。任务是在运行时移动panel2的右边缘,使其或多或少地占据panel1的宽度。
  • 为格式错误的代码道歉 - 我在这个编辑器上有点挣扎。

标签: c# winforms forms


【解决方案1】:

检查Control.AutoSizeControl.Anchor 属性。 特别是:

Control.Anchor :获取或设置控件绑定到的容器的边缘,并确定控件如何与其父级一起调整大小。

【讨论】:

  • 有问题的控件是一个固定在顶部和左侧的面板,我想移动右边缘。自动调整大小是错误的。
【解决方案2】:

如果控件是 Label,请确保 Autosize 属性设置为 false,否则 .NET 将调整控件大小以适应内容。

【讨论】:

    【解决方案3】:

    你试过Invalidate方法吗?

    【讨论】:

    • 没有。使相关控件无效?
    • 是的。它强制控件重绘。
    • 试过了 - 没有改善。有问题的控件是一个固定在顶部和左侧的面板,我想移动右边缘。
    【解决方案4】:

    您是否尝试过处理表单加载并显示时的事件?类似于: this.Loaded += MyLoadedEventHandler;在 MyLoadEventHandler 方法中调整宽度。 – 戴维奥 2 小时前

    成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      相关资源
      最近更新 更多