【发布时间】: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