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很高兴能帮上忙。