.NET WinForm ComboBox - 如何更改 DropDown 行为

发布于 2024-09-09 04:26:12 字数 252 浏览 0 评论 0原文

我在 ComboBox 中有一个相当长的列表,并且我希望 DropDown 行为有所不同。

通常,当您单击箭头时,列表会展开,显示所有选项,从选定的选项开始。 所选选项上方列出的选项是隐藏的,但可以通过向上滚动看到。

我希望列表向上滚动一点,尽可能在列表中间显示所选选项。

我已经在启用滚动条的 FlowLayoutPanel 中看到了执行此操作的方法,但我对 DDL 没有运气。该列表超过 50 个项目,因此简单地显示整个列表是不切实际的。

I've got a fairly long list in a ComboBox, and I want the DropDown behavior to be different.

Normally, when you click the arrow, the list expands showing all options, starting with the selected option.
Options listed above the selected option are hidden, but can be seen by scrolling up.

I want the list to scroll up a bit, showing the selected option in the middle of the list, whenever possible.

I've seen ways to do this in a Scrollbar enabled FlowLayoutPanel, but I've had no luck with the DDL. The list is over 50 items long, so simply showing the whole list isn't practical.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

顾北清歌寒 2024-09-16 04:26:12

我认为,你可以通过使用自己的绘图项方法来实现该效果。我的意思是,您将一个处理程序附加到 DrawItem 事件,然后在该处理程序中,您将获得您希望显示的所有所需数据。之后,将其绘制到屏幕上。

例如:

private void myComboBox_DrawItem(object sender, DrawItemEventArgs e)
        {
            if ( boundDataSource.Count > 0 && e.Index >= 0 )
            {
              if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
                {
                    //Get the data here
                    string dataToShow=  GetDataToShow()

                    e.DrawFocusRectangle();

                    System.Drawing.Graphics g = e.Graphics;
                    Rectangle r = e.Bounds;             


                    e.Graphics.FillRectangle(new SolidBrush(Color.Blue), r);
                    g.DrawStringdataToShow, e.Font, Brushes.White, r, stringFormat);
                    e.DrawFocusRectangle();
                    g.Dispose();
                }



            }
        }

In my opinion, you can achieve the effect by using your own drawing item method. By this I mean, you attach an handler to the DrawItem event, then in the handler, you get all your required data that you wish to show. After that you draw it to the screen.

For example:

private void myComboBox_DrawItem(object sender, DrawItemEventArgs e)
        {
            if ( boundDataSource.Count > 0 && e.Index >= 0 )
            {
              if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
                {
                    //Get the data here
                    string dataToShow=  GetDataToShow()

                    e.DrawFocusRectangle();

                    System.Drawing.Graphics g = e.Graphics;
                    Rectangle r = e.Bounds;             


                    e.Graphics.FillRectangle(new SolidBrush(Color.Blue), r);
                    g.DrawStringdataToShow, e.Font, Brushes.White, r, stringFormat);
                    e.DrawFocusRectangle();
                    g.Dispose();
                }



            }
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文