【问题标题】:Change fontSize of ListView with ctrl + mousewheel使用 ctrl + 鼠标滚轮更改 ListView 的 fontSize
【发布时间】:2014-06-13 14:22:23
【问题描述】:

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

在表单的 ctor 中,我为事件订阅了我的方法

        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 获取第一个 Item 的 Font.Height。 (所有项目的值都是相同的,所以第一个和任何一个一样好。)

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

    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,检测事件,...)。
这可能是什么原因造成的?

【问题讨论】:

  • 把你的计算变成浮点数,所以你不能在除法过程中截断为0。
  • @TaW 添加以提高整体质量,但这并不能解释我的问题。

标签: c# listview zooming font-size


【解决方案1】:

试试这个:

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

为了保证不同鼠标设置的安全。

这对我有用:

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

【讨论】:

  • 添加了这一点,但这只是意味着在不同的鼠标上切换“更小”和“更大”,而不是“你只能让它更大”。我发现了这个问题。
  • 我发现this related answer 也很有帮助:“如果您在组件上看不到 'MouseWheel' 事件,那么您需要手动创建它”
【解决方案2】:

自己找到的:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    相关资源
    最近更新 更多