gpt4 book ai didi

C# 控件超出父边界?

转载 作者:可可西里 更新时间:2023-11-01 09:11:51 26 4
gpt4 key购买 nike

我发现子控件不会绘制在其父控件的边界之外。因此,如果我有一个从面板右侧伸出的按钮,它会被绘制到面板结束部分的一半。

2 个问题:

  • 是否有任何方法让 child 在 parent 的边界之外进行控制(也许需要一些技巧)?
  • 该限制的原因是什么? (我想明白这一点)


示例 有 2 个按钮:b1 是大父级,b2 是较小的子级:

public Form1()
{
Size = new Size(800, 600);

Button b1 = new Button();
b1.Text = "hello world";
b1.SetBounds(0,0,256,128);
Controls.Add(b1);

Button b2 = new Button();
b2.Text = "abcdefghijklmnopqrstuvwxyz";
b2.SetBounds(192,32,128,64);
b1.Controls.Add(b2);
}

编辑:
它是关于控件内的控件 不是表单内的控件
不,没有花哨的用户界面。我知道我可以使用区域来创建疯狂的桌面应用程序。这不是我想要的。

谢谢!

最佳答案

A Form也是一个控件,因此它的行为与其他控件非常相似。

渲染限制来自这样一个事实,即控件是操作系统中的窗口,它只代表显示器的一个矩形区域。窗口无法在其自身边界之外绘制任何内容,因此如果子控件放置在这些边界之外,它将不会呈现(或仅部分呈现,具体取决于其位置)。

没有简单的方法解决这个问题,子控件的整个概念围绕着控制绘制内容的父控件。如果您想在其父控件的边界之外绘制子控件,请从父控件中删除“子控件”,因为这种关系并不真正适用。

您可以想出一些自定义呈现代码来解决这个问题,但这样一来控件就不是其他容器的真正子代,您必须编写大量呈现代码才能使其正常工作。在某些情况下,这可能是所需的行为,但在大多数情况下,默认系统行为更好(并且意味着程序员的工作更少)。

您可以通过自定义呈现表单(即,将其绘制得比实际尺寸小)然后在空白区域呈现按钮,从而获得按钮位于表单“外部”的视觉效果。但是,这需要大量工作,我不确定您是否愿意采用这种方式。

如果你想做一个花哨的 UI,其中一些控件的形状像一个 blob(而不是一个矩形)或者它们看起来是 float 的(与“主”UI 分离),类似于一些媒体播放器等:这些程序完成了整个定制渲染工作;他们的窗口仍然是矩形窗口,但在渲染过程中他们使用透明图像和区域来渲染表单。

如果您在问题中添加更多关于为什么要这样做的详细信息,将会有所帮助。

关于C# 控件超出父边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com