我有一个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,完全检测事件,......)
可能导致这种情况的原因是什么?
答案 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