c# - 如何强制以父类(super class)形式放置控件?

标签 c# winforms visual-studio user-controls

要快速总结问题,请查看底部的图片。

你好,

我创建了一个Form(名为BaseForm)作为我所有窗口的基础。 这个基本表单包含(为了简单起见)底部的“状态栏”(用户控件)之类的东西。

该状态栏已锁定,因此无法在设计器中移动或调整其大小。 它还将其 anchor 设置为左、下、右,因此它始终保持在底部并水平调整大小。

现在,当制作另一个 Form 并进行更改以使其继承 MyProject.BaseForm 而不是 System.Windows.Forms.Form 时,状态栏就在那里。

但是现在状态栏的位置和大小有问题。 状态栏标准位置和大小错误。 VisualStudio 从 BaseForm 获取位置和大小,而不是应用 Anchor。

此外,我无法(也不想!)移动/调整状态栏大小来解决问题。

一个明显且有效的解决方案是将状态栏 Dock 属性设置为 Bottom。 但我不能使用它作为我的问题的通用解决方案,因为我也有不应该停靠的控件。 (例如,按钮应始终位于表单的右下角)

最佳答案

你有一个简单的问题,控件是私有(private)的,因此不能在派生形式中被弄乱。它的所有属性都不可访问,包括位置和大小。这会将它卡住在派生形式的错误位置。布局引擎也无法移动它。以及为什么它显示锁定图标。

返回到 BaseForm,选择用户控件并将 Modifiers 属性从 Private 更改为 Protected。重建。现在您可以将其移动到派生表单上需要移动的位置。

关于c# - 如何强制以父类(super class)形式放置控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15710373/

相关文章:

c# - ASP.NET - 使用字符串 ID 和 2 个键查询表

c# - 在本地数据库中配置 DataContext

c# - 使用 AutoGenerateColumns 更改 DataGridViewColumn 的类型

c# - 跨线程操作无效: Control 'statusStrip' accessed from a thread other than the thread it was created on

c++ - 从 Visual Studio 中间窗口调用方法 nlohmann::json::dump

c# - 如何让我的控制台应用程序在不退出的情况下在另一个线程上运行后台进程?

c# - Silverlight 中动态加载的程序集调用锁定文件的 DllImprot

C# 条目验证正则表达式

visual-studio - 为开发和生产环境修改 web.config

visual-studio - Visual Studio 2013 Update 5 需要永远安装/卸载