2009-06-08 40 views
4

有沒有什麼辦法,如何使.net緊湊框架的winforms更寬滾動條? 我想成爲應用程序手指友好的,但滾動條對於手指不小的人來說非常狹窄。.NET Compact框架 - 使滾動條更寬

編輯:

的問題是在如ListView控件,數據網格等組件內置的滾動條...

的Windows Mobile 6.0,.NET Compact Framework的3.5

感謝。

+0

我不知道緊湊框架,但我假設你已經檢查了「厚度」屬性。 – ChrisF 2009-06-08 09:19:10

+0

@ChrisF:我應該在哪裏搜索「厚度」屬性? – TcKs 2009-06-08 09:40:24

+0

我使用了「厚度」,因爲您需要垂直條的「寬度」屬性以及水平條的「高度」屬性。 – ChrisF 2009-06-08 09:58:50

回答

2

我haven't檢查了,因爲我沒有設備,但有傳言說,你可以改變每Regstry設置大小:

[HKEY_LOCAL_MACHINE \ SYSTEM \ GWE]

cyHScr = 13 - 默認水平滾動條的高度

cxVScr = 13 - 垂直滾動條

此致的缺省寬度

托馬斯

1

這是我對這個:

  1. .NET(和CF版),您可以訪問數據網格/列表框控件集合... 這樣你就可以得到控制即滾動條通過控制陣列。例如mydatagrid.Contorls[0]將是水平滾動條。 這可以通過名稱來完成,也許我會在稍後發佈更詳細的解決方案。
  2. 一旦你達到了正確的控制,它只是一個更新滾動條的高度屬性的問題,對吧?......錯了! 記住滾動條是datagrid/listbox中的一個元素,因此它的原始位置(繪畫位置)被設置在一個點上,該點可以使元素在其初始化時的高度值被看到。代碼將不得不處理原始矩形內滾動條位置的重新定位。

    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); 
    

最後要考慮的事情: 當你玩的滾動條的大小,你需要記住的元素的其他部分取決於滾動條,例如,如果滾動條結束了對隱藏某些行網格,他們將無法到達...

0

你可以使用反射。受this link的啓發,我的代碼看起來像這樣。 (這可能有點過於小心,但我還不知道有通用的,這將是與反思例如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()); 
    } 
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 

所有的thx都去雅虎嚴重。