【问题标题】:C# winforms, How can I make a Combobox open upwards / Is there one that does?C# winforms,如何让 Combobox 向上打开 / 有没有这样的?
【发布时间】:2018-11-23 22:18:36
【问题描述】:

在 C# 中,一个 winforms 应用程序,

如何制作一个向上打开的组合框/是否有一个向上打开的组合框?

我看到一些这样的问题,但它们指的是 WPF 应用程序而不是 winforms 应用程序。我在问一个 winforms 应用程序。

【问题讨论】:

  • 除非你自己写一个控件否则不可能。
  • 将表单拖到屏幕底部,然后打开组合框。就像魔术一样,它向上打开!
  • @KobyDouek 也许有人写了我可以使用的?
  • 可以通过子类化控件并使用 Windows API 函数操纵其行为来实现此效果。 (以this之类的代码开头。)但是这样做的问题是操作系统使用了幻灯片效果,并且无法改变这些效果的方向,所以它看起来会向下滑动,然后会出现下拉列表它上面。丑陋的。也许你可以解释为什么你需要担心这个,而不是让窗口管理器自动处理它?您的设计不应依赖于在任何特定方向下降的组合框。
  • 嗯,不,因为在你的超大任务栏顶部有足够的空间来显示它。

标签: c# winforms


【解决方案1】:

在使用 WinForms 时这并不容易,但我可以告诉你我的想法。

您应该知道,即使组合框的可见属性设置为 false,它的下拉菜单仍然可以以编程方式显示。 所以想法是创建一个包含 2 个组合框的用户控件:

Example of my user control

上方的组合框是不可见的。当用户点击main时,下一个,上一个将被重新定位并下拉。

        private void cbb_main_Click(object sender, EventArgs e)
    {
        cbb_2.Location = new Point(cbb_main.Location.X, cbb_main.Location.Y - cbb_2.Size.Height - (cbb_2.ItemHeight *cbb_2.Items.Count));
        cbb_main.DroppedDown = false;
        cbb_2.DroppedDown = true;
    }

最后,将您的自定义控件添加到表单并试一试! Result image here!

我希望这就是你要找的。​​p>

【讨论】:

    【解决方案2】:

    如果您的组合框中有足够的内容,并且您的表单足够低,以至于组合框的内容会到达屏幕底部附近,那么它将向上打开。

    向下


    现在我将表单向下拖动一点。 (或者我可以在组合框中添加一些元素)你会看到它向上打开。

    向上


    当然,如果它在覆盖一点任务栏时向上弹出会更好(或者如果组合框按 z 顺序优先,它似乎没有)。令人讨厌的事情是,如果它处于覆盖任务栏的边缘,因为内容没有下降到足以让它向上弹出的程度。然后,当您在组合框中选择较低的内容时,您还可以将鼠标悬停在任务栏中的某些内容上,然后当您将鼠标悬停在任务栏中的一组它们上时,Windows 7 可以打开例如资源管理器窗口。 (顺便说一句,无论您的任务栏大小如何,这个问题都存在)。但在这种情况下,正如这个答案所说,您可以将表单拖低一点来解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2021-05-02
      相关资源
      最近更新 更多