c# - 手动告诉我的 ListBox 的滚动条在哪里

标签 c# winforms listbox

private void button2_Click(object sender, EventArgs e)
{
    listBox1.AutoScrollOffset.Y = 10;
}

我正在尝试在运行时使用代码手动设置垂直滚动条的位置。这是我试过的。

.Y 属性表示:“获取或设置该点的 Y 坐标”。为什么这不能编译并给我一个异常(exception):

Error 1 Cannot modify the return value of 'System.Windows.Forms.Control.AutoScrollOffset' because it is not a variable

最佳答案

这是值类型和引用类型之间的重要区别。 AutoScrollOffset 属于 Point 类型,这是一种使其成为值类型的结构。当您使用属性 getter 时,您会得到该值的副本。设置 Y 属性只会设置副本上的属性。 C# 编译器可以识别这个特定的使用问题。但不是这个:

private void button2_Click(object sender, EventArgs e)
{
    var offset = listBox1.AutoScrollOffset;
    offset.Y = 10;     // Compiles, but doesn't work
}

如果您必须为属性分配点类型的值,则要使其正常工作:

private void button2_Click(object sender, EventArgs e)
{
    listBox1.AutoScrollOffset = new Point(listBox1.AutoScrollOffset.X, 10);
}

滚动列表框实际上不起作用,它只会影响控件嵌入可滚动容器(如 Panel)中时的位置。检查 ScrollControlIntoView 以供引用。

改为分配 TopIndex 属性。

关于c# - 手动告诉我的 ListBox 的滚动条在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4489904/

相关文章:

c# - 为什么上传到 Azure blob 这么慢?

C#访问类内部静态

c# - 从脚本启用/禁用游戏对象组件 [Unity3D]

应用程序启动时的 C# Windows 窗体应用程序更新

excel - 列表框错误 "Could not Set the List property. Invalid Property Value."

c# - 如何以编程方式选择数据绑定(bind) ListBox 控件中的项目

c# - 将 NULL 值分配给 bool 变量

c# - 检查剪贴板是否有数据,粘贴到文本框中

c# - C# WinForm static void Main 不能捕获异常吗?

delphi - 如何用不同的颜色绘制选定的列表框项目?