powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / UpDown -стрелки внутри и вне текстбокса
1 сообщений из 1, страница 1 из 1
UpDown -стрелки внутри и вне текстбокса
    #38917188
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достал нетовский 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
1 сообщений из 1, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / UpDown -стрелки внутри и вне текстбокса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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