Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / UpDown -стрелки внутри и вне текстбокса / 1 сообщений из 1, страница 1 из 1
26.03.2015, 06:28
    #38917188
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UpDown -стрелки внутри и вне текстбокса
Достал нетовский NumericUpDown, не все он умеет что хотелось бы.
Пришел к выводу, что хотя бы иногда надо использовать классический API-шный.

Но есть одна проблема со времен VB6 так и нерешенная:
UpDown(API)+Textbox(VB)=DigitalPicker -нерешенные вопросы

Т.е.
Если присобачивать UpDown к Edit-API, то рамка текстбокса не уменьшается, а стрелки находятся ВНУТРИ
Если присобачивать UpDown к Textbox-Net (или Textbox VB6), то рамка текстбокса уменьшается, а стрелки находятся ВНЕ

Textbox через API рисовать никогда не охота (хотя и умею), много гимора с фокусами и т.п.
Но хочу иметь возможность пихать стрелки API-UpDown-а внутрь тестбокса .

Код такой (2 UpDown-а совершенно одинакового стиля и одинаковым кодом пристыковываются):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
 Private Sub InitUpDownS()
    Const UPDOWNSTYLE = WS_CHILDWINDOW Or WS_VISIBLE Or WS_GROUP Or _
     UDS_SETBUDDYINT Or UDS_ALIGNRIGHT Or _
     UDS_ARROWKEYS Or UDS_NOTHOUSANDS 'Or UDS_AUTOBUDDY

    '====TextBox через API======
    'создаем hEdit через API (только ввод цифр)
    hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "", _
     ES_AUTOHSCROLL Or ES_NUMBER Or WS_VISIBLE Or WS_CHILD, _
     80, 40, 60, 23, _
     Me.Handle, IntPtr.Zero, System.Runtime.InteropServices.Marshal.GetHINSTANCE _
     (System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)), 0)
    SendMessage(hEdit, WM_SETFONT, Me.Font.ToHfont, 0)

    hWndUpDown_to_hEdit = CreateUpDownControl(UPDOWNSTYLE, 0, 0, 0, 0, Me.Handle, 1, _
     System.Runtime.InteropServices.Marshal.GetHINSTANCE _
     (System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)), hEdit, 99, 0, 1)

    '===============================================================================
    '====TextBox -контрол на форме======
   'стиль для TextBox1:только ввод цифр
    SetWindowLong(TextBox1.Handle, GWL_STYLE, GetWindowLong(TextBox1.Handle, GWL_STYLE) Or ES_NUMBER)
    'пристыковка UpDown к существующему TextBox1
    hWndUpDown_to_TextBox1 = CreateUpDownControl(UPDOWNSTYLE, 0, 0, 0, 0, Me.Handle, 1, _
     System.Runtime.InteropServices.Marshal.GetHINSTANCE _
     (System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)), TextBox1.Handle, 99, 0, 1)

  End Sub



Игрался еще с ControlSpy.
По дефолту стрелки ВНЕ.
Если добавить UDS_ALIGNRIGHT и нажать RECREATE , то становятся ВНУТРИ.

Если убрать UDS_ALIGNRIGHT из моего кода, то стрелок вообще не будет ни с edit, ни с Textbox.
Документация на эту тему отсутствует.
Фигня, но бесит.

Есть идеи?

(из картинки все ясно)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / UpDown -стрелки внутри и вне текстбокса / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]