C# 列表框高度是否被其他值替换?

C# 列表框高度是否被其他值替换?,c#,listbox,size,C#,Listbox,Size,整个上午我都在为这事伤心 我创建了一个带有文本框和列表框的用户控件。列表框应显示包含在文本框中输入的文本的所有项目 它应该是一个具有类似搜索功能的组合框 所有的搜索都是有效的,只是列表框的大小调整在某一点失败了,我不知道问题出在哪里 下面的代码执行得非常完美。但是在lbresult无效后,当可视行=1时,lbresults的高度设置为4 代码下面是console语句生成的输出 if (this.lbResults.Visible) { int viewableRows =

整个上午我都在为这事伤心

我创建了一个带有文本框和列表框的用户控件。列表框应显示包含在文本框中输入的文本的所有项目

它应该是一个具有类似搜索功能的组合框

所有的搜索都是有效的,只是列表框的大小调整在某一点失败了,我不知道问题出在哪里

下面的代码执行得非常完美。但是在
lbresult
无效后,当可视行=1时,
lbresults
的高度设置为4

代码下面是console语句生成的输出

if (this.lbResults.Visible)
{
            int viewableRows = this.lbResults.Items.Count;
            Console.WriteLine(viewableRows.ToString());
            if (viewableRows > this.maxItemsDisplayed)
            {
                viewableRows = this.maxItemsDisplayed;
            }
            Console.WriteLine(viewableRows.ToString());

            int lbresults_height = ((viewableRows) * 15) ;

            Console.WriteLine(lbresults_height);

            this.ResizeControl(this.Width, this.txtSearch.Height + lbresults_height);
            this.lbResults.Size = new Size(this.lbResults.Width, lbresults_height);
            this.lbResults.Invalidate();
            Console.WriteLine("Listbox Height: " + lbResults.Height.ToString());
        }
        else if(!this.lbResults.Visible)
        {
            this.ResizeControl(this.Width, this.txtSearch.Height);
}
输出:

1
1
15
列表框高度:4

我找不到任何理由将其设置为4


请帮帮我。

您描述的行为很可能是因为
IntegralHeight
设置为true()。如果希望
列表框
获得与您输入的高度完全相同的值,只需禁用此选项:

this.lbResults.IntegralHeight = false;

另一方面,请记住,这是一个不错的功能。启用此选项后,C#将您输入的高度值作为建议,并对其进行调整以满足目标:列表框的最终高度必须可除以每个项目的高度(实际高度,即项目高度+项目之间的间隔)。

什么是“ResizeControl”语句?这是你自己定义的吗?是什么东西?这是WinForms还是WPF?尼克:我给它下了定义myself@nick你没看到我的答案吗?你不需要问这些问题。此行为是IntegralHeight属性的正常输出。@varocarbas否,我没有看到您的答案-我们同时键入。N.但是如果itemheight=13,则不应显示第一项。因为15/13=1.xxx=1@user214623不,它是真实的高度,你看到的那个(它比itemheight大一点)。你自己做一些测试,以证实我所说的:如果你按照我的建议去做,你将不再看到这个问题。如果启用IntegralHeight,并使用简单的示例进行计算,您将看到所考虑的高度大约为itemheight+1.2(默认字体大小)。我不得不说:D您真是太棒了:D@user214623很高兴能帮上忙。