Элементы управления, добавленные в форму Windows, отключены - PullRequest
0 голосов
/ 24 сентября 2018

Итак, я пытался найти это в Google, но не смог найти решение или нашел правильный способ даже решить эту проблему с Google.

Итак, допустим, я создаюФорма в Visual Studio.Я установил размер формы Width = 250, Height = 250.Я с помощью панели инструментов добавляю текстовое поле в форму, которое выглядит как Местоположение X = 25, Y = 25 с Width = 100.

Вы все со мной?

Метод загрузки для формы имеет следующийcode:

Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim TextBox2 As New TextBox With {
        .Location = New Point(25,25),
        .Visible = True,
        .Width = 100
    }
    Me.Controls.Add(TextBox2)
End Sub

Ожидаемый результат при запуске этой программы - наличие двух текстовых полей непосредственно друг над другом, в результате чего создается впечатление, что 1 текстовое поле находится на форме.Но что на самом деле происходит, если у меня есть TextBox, который я поместил на форму, не программно отображаемую там, где я ее поместил, и TextBox, созданный мной в методе Load, смещенным относительно предполагаемого значения.

Так почему это происходит?Это проблема с тем, как я добавляю элемент в форму?

РЕДАКТИРОВАТЬ: Вот как выглядит моя форма, когда я запускаю вышеуказанный код:

Offset Text Boxes

РЕДАКТИРОВАТЬ 2:

Чтобы пояснить, я не пытаюсь выяснить, как поместить один элемент формы поверх другого.Я пытаюсь выяснить, почему у меня возникает проблема с размещением любого элемента в определенном месте при попытке добавить элемент программным способом.

1 Ответ

0 голосов
/ 24 сентября 2018

Если вы хотите программно создать новый TextBox, это может вам помочь:

Dim TextBox1 As New TextBox
    With TextBox1
        .Location = New Point(10, 10)
        .Name = "TextBox1"
        .Text = " "
        .Visible = True
    End With
 AddHandler TextBox1.Click, AddressOf TextBox1_Click
 Me.Controls.Add(TextBox1)

Поскольку мы добавили Hanlder для события .Click, мы должны объявить функцию, которая его обрабатывает:

Private Sub TextBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    MsgBox("You clicked Me!")
End Sub

Если у вас есть другой TextBox в вашей форме, например, TextBox1, мы можем использовать его местоположение в другом, чтобы создать новый TextBox, как показано ниже:

Dim newTextBox As New TextBox
    With newTextBox
        .Location = New Point(TextBox1.Location.X, TextBox1.Location.Y + newTextBox.Height + 10)
        .Name = "newTextBox"
        .Visible = True
    End With
AddHandler newTextBox.Click, AddressOf newTextBox_Click
Me.Controls.Add(newTextBox)

Примечания:

Не забудьте переименовать функцию, которая обрабатывает событие .Click, если вы измените имя кнопки. EG:

 AddHandler newTextBox.Click, AddressOf newTextBox_Click

и

Private Sub newTextBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    MsgBox("You clicked Me!")
End Sub

Очевидно, что вы можете добавить обработчик для каждого события TextBox , которое может быть обработано в vb.сеть.TextBox.Click был просто примером!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...