【问题标题】:Control that is bigger than the form region is getting clipped in C#大于窗体区域的控件在 C# 中被剪裁
【发布时间】:2010-12-29 01:49:56
【问题描述】:

我有一个普通的表单控件,在 CTOR 函数中我有以下内容:

this.Region = System.Drawing.Region.FromHrgn(WinUser.CreateRoundRectRgn(0, 0, this.Width, this.Height, 16, 16));

稍后在我的应用程序中,我创建了一个 ListBox 对象并将其显示在我的父窗体的底部,但是列表框的大小比我的窗体大,因此位于父窗体区域之外的 ListBox 的下半部分被剪裁了。

有什么办法可以解决这个问题,即我不希望增加表单大小,而是希望列表框完全显示,即使它比表单大。

【问题讨论】:

    标签: c# winforms listbox


    【解决方案1】:

    这种壮举只有在您创建一个允许超出窗体边界的窗口时才能实现。 Windows 支持这一点,组合框的下拉列表就是一个例子。然而,Windows 窗体并不关心它。检查我在this thread 中的代码,看看它是如何完成的。

    【讨论】:

    • 谢谢,我试试。你能告诉我“SetBoundsCore”是做什么的吗?什么时候调用“public new Point Location”?
    • 这些是 MSDN 库中记录的 Control 类的属性和方法。先看看那里。
    • 谢谢 nobug 我试过了,效果很好。我现在遇到的唯一问题是新的 ListBox 获得焦点,而我的父表单被停用。根据我的 APP 设计,我不希望这样。我需要从我的父表单中显示/setTopLevel 才能工作(使用一些标记机制)。由于 setTopLevel 是控件的受保护成员,我不能直接从父窗体调用它,而是使用粗略的间接调用我的列表框对象中的公共函数。有没有什么方法必须调用 setTopLevel 来显示控件?
    • 这不应该发生,该列表框的 Parent 属性有问题。确保表单是父表单。
    猜你喜欢
    • 2015-04-02
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2010-11-14
    • 2011-03-17
    相关资源
    最近更新 更多