Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 锚定控件赢得';调整窗口大小时不调整大小(56k)_C#_Winforms_Datagridview_Mouseevent - Fatal编程技术网

C# 锚定控件赢得';调整窗口大小时不调整大小(56k)

C# 锚定控件赢得';调整窗口大小时不调整大小(56k),c#,winforms,datagridview,mouseevent,C#,Winforms,Datagridview,Mouseevent,这件事真让我恼火。我有一个表单,由应用程序的主表单派生和拥有,用于搜索记录。表单布局在停靠的TableLayoutPanel中,具有绝对大小和百分比大小的行/列组合,以便在数据输入和结果控件增长时,标签保持相同大小。我们总共讨论了20个控件 问题是,尽管TableLayoutPanel是填充停靠的,并且所有子控件也都是填充停靠的,但当我抓取窗口边缘并拖动时,表单内部没有任何大小调整。在设计器中,一切都可以调整大小,但在实际的应用程序中却不能 我确实使用了我的Google fu,找到了指向我的。我

这件事真让我恼火。我有一个表单,由应用程序的主表单派生和拥有,用于搜索记录。表单布局在停靠的TableLayoutPanel中,具有绝对大小和百分比大小的行/列组合,以便在数据输入和结果控件增长时,标签保持相同大小。我们总共讨论了20个控件

问题是,尽管TableLayoutPanel是填充停靠的,并且所有子控件也都是填充停靠的,但当我抓取窗口边缘并拖动时,表单内部没有任何大小调整。在设计器中,一切都可以调整大小,但在实际的应用程序中却不能

我确实使用了我的Google fu,找到了指向我的。我用线程调用创建了一个派生的FlowLayoutPanel和一个派生的TableLayoutPanel,并将它们放入其中,但它仍然不起作用。这是唯一一个发生这种情况的表单,另一个表单也有一些相当深的嵌套(它使用TabControl和TableLayoutPanel来布局数据输入控件,但没有RBs)

其他相关信息:

  • 没有设置MaxSize属性
  • 除了默认的左上角外,此表单中没有任何内容被锚定;几乎所有的东西都装在集装箱上。但是,包含搜索结果表的子用户控件使用锚定在内部布局;在我使用这些控件的另一种形式中,这并不是问题,在这种形式中,我将它们填充到SplitPanels(嵌套两个深度,不少于两个)
  • 单选按钮和标签设置为自动调整大小,但没有其他设置。这似乎是这些控件的默认行为,即使这些值在设计器中以粗体显示,并且与正确调整大小的其他窗口的设置相匹配
  • 调整大小事件是为表单而不是TLP触发的
  • 当TLP锚定到窗口而不是停靠在窗口时,该行为不会改变(它永远不会同时发生这两种情况)
我在这儿把头发扯下来。救命啊

编辑:以下是一些请求的图片,显示设计器和应用程序中的布局行为:

以“嵌套”开头的控件直接派生自内置面板控件,它们唯一的更改是重写OnSizeChanged()以异步调用基方法(KB文章中的解决方法)。正如我前面所说,它也不能与内置面板一起工作。从最后两个窗口可以看到,mainLayout TLP即使停靠在设计器中的窗口上,也不会增长。

控件是锚定的(.Anchor属性),还是停靠的?我发现设置一个会禁用另一个。我会查看.Designer.cs文件,看看是否同时设置了dock和anchor属性,甚至可能从源代码中删除属性(当然,要提前备份)


我通常尝试的另一件事是在单独的,新建表单并查看是否得到相同的结果。

我遇到了usercontrols没有按照您描述的方式执行预期操作的问题。这可能与UserControlAutoScaleMode属性设置为“font”有关-请尝试将其更改为继承。

不要在TableLayoutPanel中固定或锚定单个控件。这很少能满足你的需要。

Epic Facepalm

在这个表单的构造函数(用户代码端)中,我调用了
SuspendLayout()
,以执行一些可能影响布局的附加设置。猜猜我做完后没打电话给谁


如果您调用SuspendLayout来进行自己的自定义布局更改,请始终确保调用
ResumeLayout(true)
(或
ResumeLayout(false)
,后跟
PerformLayout()
)完成后。

尝试设置
Dock=DockStyle。在
TableLayoutPanel
的容器上填充

您有它的图片还是“文档大纲”的图片view@Hath:你说的“文档大纲视图”是什么意思?我将在设计视图和应用程序中为您提供表单的打印屏幕。在设计视图中,View->Other Windows->Document Outline(Ctrl+W,U)Sweet不知道存在该屏幕。请参阅我的编辑:为该页面实例化的所有控件都是停靠的,但是表单上使用的UserControl的子控件都是停靠的。以这种方式混合它们在主窗体中不是问题。@KeithS:好的,我的意思是同一个控件同时具有锚点和停靠属性集通常不起作用。您能做些什么来确定哪个控件没有调整大小吗?例如,在一个容器中设置背景色或类似的东西,在运行时会告诉你哪个容器正在调整大小,哪个不是?@gmagna:I get ya;否,没有一个控件同时设置了dock和anchor属性。一旦我清理了打印屏幕(无法向全世界显示搜索结果),我会发布打印屏幕,我会尝试背景色技巧。@KeithS:还有,当你将表单缩小到内容以下时会发生什么?当你把它变大时,它不会调整大小,但是当你把它变小时,会发生什么?你有滚动条,还是干脆把它切断?我最近在一个大型项目中经历了一次全局“表单清理”,所以我感觉到了您的痛苦。@初始表单大小设置为其最小大小,但是如果我将表单大小调整为大于设计中设置的最小值,当我在应用程序中缩小窗口时,控件不会收缩。如果我告诉你在用户控件的实例上没有设置自动缩放模式,你会说这是个问题吗?也不要为它们设置DockStyle=Fill。需要更多信息;我想要的是控件占用TLP中单元格所提供的空间,并随窗体一起拉伸和收缩。这意味着我要么停靠它们,锚定它们,要么在表单的调整大小事件处理程序中滚动我自己的调整大小逻辑。使用填充停靠控件填充填充停靠TLP,并使用TLP控制哪些控件c