使用ctrl + mousewheel更改ListView的fontSize

时间:2014-04-28 06:48:15

标签: c# listview zoom font-size

我有一个ListView( auftraegeView )。在这个ListView中,我想通过Ctrl + MouseWheel aka更改其项目的FontSize。像excel或浏览器一样的简单缩放。

在表格中,我订阅了我的方法

        this.MouseWheel += scrollZoom;

我的EventHandler计算新的FontHeight并应用它,如果它没有超出边界。 RowHeight始终保持更大,最后我调整了列的大小,因此缩放也适用于水平刻度。

private void scrollZoom(object sender, MouseEventArgs e)
    {
        if(Control.ModifierKeys != Keys.Control)
            return;

        int currFontHeight = ListViewFontHeight;

        int delta = (e.Delta)/120;

        int newFontHeight = currFontHeight + delta;

        if(newFontHeight < 1 || newFontHeight > 150)
            return;

        ListViewFontHeight = newFontHeight;
        ListViewRowHeight = ListViewFontHeight + 4;

        auftraegeView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
    }

ListViewFontHeight 获取第一个项目的Font.Height。 (所有项目的值都相同,因此第一项与任何项目一样好。)

设置是问题所在(见下文)。我的想法是,我只需浏览每个项目并更改字体。

    private int ListViewFontHeight
    {
        get { return auftraegeView.Items[0].Font.Height; }

        set
        {
            foreach (ListViewItem line in auftraegeView.Items)
            {
                line.Font = new Font(line.Font.FontFamily, value);
            }
        }
    }

问题/问题
无论我滚动的方向如何,FontSize只会增加直到达到天花板。其余工作正常(设置ListViewRowHeight,完全检测事件,......) 可能导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:3)

试试这个:

delta = (e.Delta > 0? 1 : -1);

安全地进行不同的鼠标设置。

这对我有用:

 float delta = (e.Delta > 0 ? 2f : -2f);
 listView1.Font = new Font (listView1.Font.FontFamily, listView1.Font.Size + delta);

答案 1 :(得分:0)

自己找到它:

在ListViewFontHeight - 属性中,get访问器使用 Item.Font.Height 而不是 Item.Font.Size

private int ListViewFontHeight
    {
        get { return (int)auftraegeView.Items[0].Font.Size; } //works now