.NET Compact框架 - 使滚动条更宽

时间:2009-06-08 09:15:52

标签: .net winforms user-interface compact-framework

有没有办法,如何在.net紧凑框架的winforms中使滚动条更宽? 我希望手指应用程序友好,但滚动条对于手指不小的人来说非常狭窄。

编辑:

问题在于ListView,DataGrid等组件中的内置滚动条......

Windows Mobile 6.0,.NET Compact Framework 3.5

感谢。

4 个答案:

答案 0 :(得分:2)

我没有检查过,因为我没有设备,但有传言说你可以改变每个Regstry设置的大小:

[HKEY_LOCAL_MACHINE \ SYSTEM \ GWE]

cyHScr = 13 - 水平滚动条的默认高度

cxVScr = 13 - 垂直滚动条的默认宽度

亲切的问候

托马斯

答案 1 :(得分:1)

以下是我对此的看法:

  1. .net(以及cf版本)使您可以访问datagrid / listbox的控件集合... 所以你可以通过控制阵列到达控件,即滚动条。例如,mydatagrid.Contorls[0]将是水平滚动条。 这可以通过名字来完成,也许我稍后会发布一个更精细的解决方案。
  2. 一旦你达到了正确的控制,只需要更新滚动条的高度属性,对吧?...错! 请记住,滚动条是数据网格/列表框中的一个元素...因此,它的原始位置(绘制位置)设置在一个点上,该点可以使元素在初始化时的高度值处被看到... 所以你的代码必须处理原始矩形内滚动条位置的重新定位。

    myDataGrid.Controls[0].Height = myDataGrid.Controls[0].Height + 60;
    myDataGrid.Controls[0].Location = new Point(myDataGrid.Controls[0].Location.X, myDataGrid.Controls[0].Location.Y - 60);
    
  3. 最后要考虑的事情: 当您使用滚动条大小时,您需要记住元素的其他部分取决于滚动条,例如,如果滚动条最终隐藏在网格上的某些行,它们将无法访问...

答案 2 :(得分:1)

VB版:

'Increase size of the Vertical scrollbar of your DataGrid'
For Each vBar As VScrollBar In yourDG.Controls.OfType(Of VScrollBar)()
    vBar.Width = 25
Next

'Increase size of the Horizontal scrollbar of your DataGrid'
For Each hBar As HScrollBar In yourDG.Controls.OfType(Of HScrollBar)()
    hBar.Height = 25
Next

所有这些都归于Yahoo Serious。

答案 3 :(得分:0)

您可以使用反射。灵感来自this link,我的代码看起来像这样。 (这可能有点过于谨慎,但我不太确定这与反射的通用程度如何。例如,在此表单上没有为TextBox找到VScrollBar。)

using System.Reflection;
    //...
    public static void SetVerticalScrollbarWidth(Control c, int w)
    {
        try
        {
            var lGridVerticScrollBar = GetNonPublicFieldByReflection<VScrollBar>(c, "m_sbVert");
            lGridVerticScrollBar.Width = w;
        }
        catch
        {
            // fail soft
        }
    }

    public DataGridForm()
    {
        SetVerticalScrollbarWidth(dataGrid, 30);
    }

    public static T GetNonPublicFieldByReflection<T>(object o, string name)
    {
        if (o != null)
        {
            Type lType = o.GetType();
            if (lType != null)
            {
                var lFieldInfo = lType.GetField(name, BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
                if (lFieldInfo != null)
                {
                    var lFieldValue = lFieldInfo.GetValue(o);
                    if (lFieldValue != null)
                    {
                        return (T)lFieldValue;
                    }
                }
            }
        }
        throw new InvalidCastException("Error in GetNonPublicFieldByReflection for " + o.ToString() );
    }