.NET Compact framework - сделать полосы прокрутки шире - PullRequest
4 голосов
/ 08 июня 2009

Есть ли способ как расширить полосу прокрутки в winforms для .net compact framework? Я хочу, чтобы приложение было удобным для пальцев, но полосы прокрутки очень узкие для людей с не маленькими пальцами.

EDIT:

Проблема связана со встроенными полосами прокрутки в таких компонентах, как ListView, DataGrid и т. Д. *

Windows Mobile 6.0, .NET Compact Framework 3.5

Спасибо.

Ответы [ 4 ]

2 голосов
/ 08 июня 2009

Я не проверял это, потому что у меня нет устройства, но ходят слухи, что вы можете изменить Размер для Regstry.

[HKEY_LOCAL_MACHINE \ SYSTEM \ GWE]

cyHScr = 13 - высота горизонтальной полосы прокрутки по умолчанию

cxVScr = 13 - Ширина вертикальной полосы прокрутки по умолчанию

С уважением

Thomas

1 голос
/ 29 марта 2016

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 Серьезно.

1 голос
/ 08 февраля 2011

Вот мой взгляд на это:

  1. .net (и версия cf) дает вам доступ к коллекции элементов управления таблицы данных / списка ... так что вы можете получить доступ к элементу управления, то есть к полосе прокрутки через массив элементов управления. Например, 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);
    

Напоследок, что нужно учитывать: Когда вы играете с размером полосы прокрутки, вы должны помнить, что другие части элемента зависят от полосы прокрутки, например, если полоса прокрутки в конечном итоге скрывает некоторые строки в сетке, они не будут доступны ...

0 голосов
/ 22 марта 2011

Вы можете использовать отражение. Вдохновленный этой ссылкой , мой код будет выглядеть примерно так. (Это может быть слишком осторожно, но я не уверен, насколько это будет общего с отражением. Например, VScrollBar не найден для TextBox в этой форме.)

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() );
    }
...