Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何判断水平滚动条是否显示在列表框上_C#_Listbox - Fatal编程技术网

C# 如何判断水平滚动条是否显示在列表框上

C# 如何判断水平滚动条是否显示在列表框上,c#,listbox,C#,Listbox,我正在将项目添加到c#列表框中,并希望始终将其滚动到添加到列表中的最后一个项目,使其可见。该列表通常会超出可用空间,因此垂直滚动条将显示,当用户可以移动该列表时,我需要使用一个新项目强制它再次跳转到末尾。我发现的唯一有用的方法是将TopIndex属性用于框中的行数—可以显示的行数。除非其中一行太长,在这种情况下,水平滚动条占用了大约最后2项的空间,否则我可以使用下面的代码。如果我能弄清楚是否显示了水平条,我就可以改变计算中的行数来解释它 LB1.Items.Add(strText

我正在将项目添加到c#列表框中,并希望始终将其滚动到添加到列表中的最后一个项目,使其可见。该列表通常会超出可用空间,因此垂直滚动条将显示,当用户可以移动该列表时,我需要使用一个新项目强制它再次跳转到末尾。我发现的唯一有用的方法是将TopIndex属性用于框中的行数—可以显示的行数。除非其中一行太长,在这种情况下,水平滚动条占用了大约最后2项的空间,否则我可以使用下面的代码。如果我能弄清楚是否显示了水平条,我就可以改变计算中的行数来解释它

        LB1.Items.Add(strText);
        LB1.TopIndex = Math.Max(0,lbXmlMsg.Items.Count - 10); // 10 rows visible
为了确保新项目可见,这似乎需要做很多工作。我在这里遗漏了什么吗?

您可以通过调用来检查水平滚动条是否可见

LB1.HorizontalScrollbar
根据OP的评论,上述措施不起作用

我还想说,硬编码的数字是不好的做法,你可以这样做:

然后这是一种自动滚动的方法

这些我都没试过,但应该有用


如果您切换到ListView,它有一个
EnsuRevible
函数,可以完全执行您想要的任务。

添加项目后,您可以执行以下操作

listBox1.SelectedIndex = listBox1.Items.Count - 1;

它将确保最后一项可见。

我不确定如何轻松检测水平滚动条是否显示,但这里有一个扩展方法,可以让您滚动到最后一项,而不会引发
SelectedIndexChanged
事件

public static void ScrollToLastItem(this ListBox lb, EventHandler eventHandler)
{
    lb.SelectedIndexChanged -= eventHandler;
    lb.SelectedIndex = lb.Items.Count - 1;
    lb.SelectedIndex = -1;
    lb.SelectedIndexChanged += eventHandler;
}
您可以这样使用它(传入
SelectedIndexChanged
事件处理程序)


如果你不想滚动到最后一个项目,可以很容易地将其修改为滚动到任何项目索引。

你没有遗漏任何内容,只是在需要时添加滚动条有问题,我相信我已经看到了很多关于这方面的主题,只是现在还不确定这是一个好建议。但是,我不希望它被选中,但在添加LB1.SelectedIndex=-1之后,可以解决这个问题HorizintalScrollbar属性始终为true,以便在必要时创建它,因此请参阅帮助。ListView的想法很好,但仅仅替换该类型似乎还不够。我以后再试试。帮了大忙-一小时内回复2条有用信息。多数弹劾
myListBox.ScrollToLastItem(myListBox_SelectedIndexChanged);