2009-06-08 9 views
4

Y at-il une certaine façon, comment faire scrollbar plus large dans WinForms pour compact framework .net? Je veux être sensible aux doigts, mais les barres de défilement sont très étroites pour les personnes n'ayant pas de petits doigts..NET Compact Framework - font plus larges barres de défilement

EDIT:

Le problème est avec intégré dans les barres de défilement dans les composants comme ListView, DataGrid, etc ...

Windows Mobile 6.0, .NET Compact Framework 3.5

Merci.

+0

Je ne connais pas la structure compacte, mais je suppose que vous avez vérifié une propriété "épaisseur". – ChrisF

+0

@ChrisF: Où dois-je rechercher la propriété "épaisseur"? – TcKs

+0

J'ai utilisé "épaisseur" comme vous voulez la propriété "largeur" ​​des barres verticales, et la propriété "hauteur" des barres horizontales. – ChrisF

Répondre

2

Je havent vérifié que, parce que je n'ai pas de dispositif mais la rumeur veut que vous pouvez changer la taille par Regstry Réglages:

[HKEY_LOCAL_MACHINE \ SYSTEM \ GWF]

cyHScr = 13 - Par défaut hauteur de barre de défilement horizontal

cxVScr = 13 - largeur par défaut de la barre de défilement vertical

Bien cordialement

Thomas

+2

Mais cela affecte toutes les applications de l'appareil. Il peut casser la disposition de l'interface utilisateur d'autres applications. – TcKs

+0

Puisque les barres de défilement sont utilisées à l'échelle du système et non spécifiques au contrôle, vous devrez créer vos propres commandes avec votre propre barre de défilement. – CaptnCrash

+0

Je pense que je me trompe, vérifiez la classe ScrollBar dans System.Windows.Controls.Primitives – CaptnCrash

1

Voici mon opinion à ce sujet:

  1. .net (et la version cf) vous donne accès à la collection de contrôle du DataGrid/... listbox afin que vous puissiez le dire la commande barre de défilement via la matrice de contrôle. Par exemple mydatagrid.Contorls[0] serait la barre de défilement horizontale. Cela peut être fait par nom peut-être que je posterai une solution plus élaborée plus tard.
  2. Une fois que vous avez atteint le bon contrôle, il suffit de mettre à jour la propriété Height de la barre de défilement, n'est-ce pas? Rappelez-vous que la barre de défilement est un élément de la grille de données/liste ... donc son emplacement d'origine (position de peinture) est défini à un point permettant de voir l'élément à la valeur de hauteur initialisée ... le code devra gérer le repositionnement de l'emplacement de la barre de défilement dans le rectangle d'origine.

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

Enfin choses à considérer: Lorsque vous jouez avec la taille de la barre de défilement, vous devez vous rappeler d'autres parties de l'élément dépendent de la barre de défilement, par exemple si la barre de défilement finit par cacher quelques lignes sur la grille, ils ne seront pas joignables ...

+1

L'avez-vous essayé? Avez-vous résolu le problème avec des lignes surchargées? – TcKs

+1

Que diriez-vous de sélectionner le type droit avec TypeOf du Linq: 'foreach (VScrollBar LBAR dans dataGrid.Controls.OfType ()) { lBar.Width = w; } ' Je pense que ce serait beaucoup plus propre que juste itérer sur toutes les commandes (ou ma propre réponse avec réflexion) –

0

Vous pouvez utiliser la réflexion. Inspiré par this link, mon code ressemblerait à ceci. (Il est peut-être un peu trop prudent, mais je ne suis pas sûr de savoir comment générique ce serait avec la réflexion Par exemple, le VScrollBar ne se trouve pas pour une zone de texte sur ce formulaire..)

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

version 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 

Tout le thx va à Yahoo Serious.

+0

Vraiment belle approche! Escp surtout parce que je ne connaissais pas "OfType" – etalon11

+0

Je sais que c'est vieux, mais toujours très pertinent. Où mettez-vous ce code? Quelqu'un at-il eu ce travail? – user1500403

+0

'Private Sub Form1_Load (...) // Insérez le code:) end sub'' Voilà comment je l'ai fait fonctionner, j'espère que ça va vous aider! – Febraiz

Questions connexes