Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Нарушитель
 Аватар для HACKER KAY
21 / 47 / 5
Регистрация: 03.06.2019
Сообщений: 368
Записей в блоге: 10

Вылет при удалении элемента управления

26.02.2021, 19:50. Показов 2028. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Написал элемент управления TextBox Plus - текстовое поле с дополнительными двумя свойствами - WaterMark (призрачный текст) и AcceptsCtrlBack (горячие клавиши Ctrl + Backspace)

Всё получилось "на ура", НО... Если удалить этот контрол с формы в конструкторе, то тут же студия крашнется ("Прекращена работа программы"). Тестировалось на Visual Studio 2010, 2012, 2017, 2019. Везде проблема одна и та же.

Кому не составит труда - покопайтесь в моём коде (он ужасный, я знаю, не стоит об этом писать). Извините, что заставляю копаться в полном дерьме "яж-программиста"

Добавлено через 27 секунд
VB.NET
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
'==============================================================
' [ Улучшенное текстовое поле System.Windows.Forms.TextBox ]
'  Код написан: Kay Kokh - @dosx_plus (Telegram)
'
' Просьба сохранять авторство.
'==============================================================
 
 
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices
 
Public Class TextBoxPlus
    Inherits TextBox
    Dim Runtime As New Timer
    Property WaterMark As String = Nothing
    Property AcceptsCtrlBack As Boolean = True
    Sub New()
        Me.AcceptsTab = True
        AddHandler Runtime.Tick, AddressOf LoadSettings
        Runtime.Interval = 50
        Runtime.Start()
        Me.Update()
        Me.Focus()
    End Sub
 
    Sub LoadSettings()
        Me.SetWatermark(WaterMark)
    End Sub
 
    Private Sub CtrlBackspaceEvent(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Me.KeyDown
        If AcceptsCtrlBack = True Then
            If Me.ReadOnly = False Then
                If e.Control AndAlso e.KeyCode = Keys.Back Then
                    e.SuppressKeyPress = True
                    If Me.SelectionStart > 0 Then
                        SendKeys.Send("+{LEFT}{DEL}")
                    End If
                End If
            End If
        End If
    End Sub
End Class
 
Module TextboxPlusWinAPI
    Private Const API_LIBRARY As String = "user32.dll"
    Private Const ECM_FIRST As UInteger = &H1500
    Private Const EM_SETCUEBANNER As UInteger = ECM_FIRST + 1
    <
        DllImport(
            API_LIBRARY,
            CharSet:=CharSet.Auto,
            SetLastError:=False
        )
    >
    Private Function SendMessage(
        ByVal hWnd As IntPtr,
        ByVal Msg As UInteger,
        ByVal wParam As UInteger,
    <
        MarshalAs(
            UnmanagedType.LPWStr
        )
    > ByVal lParam As String) As IntPtr
    End Function
    <
        Extension()
    >
    Sub SetWatermark(
        ByVal TXT As TextBox,
        ByVal WaterMarkTextString As String
    )
        SendMessage(
            TXT.Handle,
            EM_SETCUEBANNER,
            0,
            WaterMarkTextString
        )
    End Sub
End Module
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2021, 19:50
Ответы с готовыми решениями:

Возникает ли событие в Listbox при добавлении или удалении элемента
Привет! Ребят, есть ли у Listbox событие, когда добавляется или удаляется item? Просмотрел доступные события в студии, но на первый...

Ошибка при удалении первого элемента
Здравствуйте! Столкнулся с такой проблемой: ниже код кнопки удаления. Все работает при удалении любых элементов кроме первого. Первый он...

Освобождение памяти при удалении элемента в List<T>
Доброго времени суток, уважаемые форумчане! Скажите пожалуйста, если присвоить значение элементу в листе как null, высвободится ли...

2
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
26.02.2021, 22:46
Лучший ответ Сообщение было отмечено HACKER KAY как решение

Решение

1 27 строка - ссылка на метод, который отсутствует в коде
2 Скорее всего, после удаления контрола с формы таймер продолжает работать и отсылает SetWatermark свое ТЕЛО, при этом ссылка на контрол (TXT.Handle) при возврате выдает исключение.
3 Попробуйте вставить код остановки таймера перед удалением контрола по вызову метода
VB.NET
1
2
3
Protected Overrides Sub OnHandleDestroyed(e As EventArgs)
'...
End Sub
1
Нарушитель
 Аватар для HACKER KAY
21 / 47 / 5
Регистрация: 03.06.2019
Сообщений: 368
Записей в блоге: 10
27.02.2021, 11:26  [ТС]
Sklifosofsky, спасибо, очень выручил)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.02.2021, 11:26
Помогаю со студенческими работами здесь

Массив List. Изменение индексов при удалении элемента
Подскажите пожалуйста немного по теорий массивов List. Допустим я создал 10 элементов, индексы (0 - 9). В каждое записал значение от 1...

Сдвиг элементов массива влево при удалении элемента
Дана программа с массивом, этот массив заполнен путями к файлам.Нужно что об при удалении каково либо элемента из данного массива, массив...

Кривая расстановка указателей при удалении элемента из очереди
При заполнении и просмотре всё работает в обоих направлениях, но после удаления элементов( которые меньше первого) просмотр возможен с...

В чем отличия пользовательского элемента управления от настраиваемого элемента управления?
В чем отличия пользовательского элемента управления от настраиваемого элемента управления в контексте Windows Forms?

Вылет программы при удалении динамического массива
Писал программу с использованием динамического массива, все компилилось нормально, но в какой-то момент программа просто начала вылетать,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru