2013-02-25 3 views
11

я были созданы кнопки и полей ввода с помощью кодирования в следующем цикле, результат исполненияКак получить контроль над свойством "String Name"?

'T(x).Name = "text_1" 
'T(x).Name = "text_2" 
'T(x).Name = "text_3" 
'.... 

'B(x).Name = "button_1" 
'B(x).Name = "button_2" 
'B(x).Name = "button_3" 
'... 

и я хочу, чтобы получить текстовое поле свойства при е я нажимаю кнопку, я могу получить кнопку свойства, когда нажмите как button_1.Name.ToString но я не могу получить текст_1,2,3 .... свойство.

Я делаю некоторый трюк с помощью функции split button_1.Name.ToString и получаю последнее число и добавляем его в текстовое поле, такое как "text_" & button_1.Name.ToString, но я не могу преобразовать эту строку в объект.

Update

Вот код, я использую, чтобы загрузить элементы управления в цикле:

C_A_TEXT(x) = New TextBox() 
C_A_TEXT(x).Dock = System.Windows.Forms.DockStyle.Fill 
C_A_TEXT(x).Location = New System.Drawing.Point(270, 5) 
C_A_TEXT(x).Margin = New System.Windows.Forms.Padding(0) 
C_A_TEXT(x).Size = New System.Drawing.Size(70, 27) 
C_A_TEXT(x).TabIndex = 5 
C_A_TEXT(x).Name = "NEW_RECHARGE_COUNT_TEXT_" & x 

Update 2

Вот еще код:

AddHandler C_A_BUTTONS(x).Click, AddressOf C_A_BUTTON 

Private Sub C_A_BUTTON(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    Dim thisButton As Button = sender Dim A = CType(Me.Controls("NEW_RECHARGE_COUNT_TEXT_1"), TextBox) 
    MsgBox(A.Text.ToString) 'Error! 
End Sub 

ответ

21

Вы можете получить доступ к управления по названию по Form.Controls собственности, например:

Dim text1 As TextBox = CType(Me.Controls("text_1"), TextBox) 
+0

Я хочу выбрать элементы управления по названию сжигания («НАЗВАНИЕ») – 2013-02-25 22:32:20

+0

Это именно то, что я продемонстрировал. В моем примере имя строки - 'text_1". –

+1

Я знаю, но когда я пытаюсь 'MsgBox (text1.Name.ToString)' result' Error' :(, Я не могу получить какое-либо свойство. – 2013-02-26 00:07:00

0

Название нити и ваше описание проблемы под рукой, кажется, немного отличаются друг от друга.

Чтобы ответить на ваш титул (найти управление своим именем) используйте следующую команду:

Dim myControlToFind = LayoutRoot.FindName("NAMEOFCONTROL") 

Более подробную информацию об этом методе можно найти here.

Чтобы ответить на описание вашего вопроса, как (для доступа кода генерируется контроль после того, как он щелкнул) сделайте следующее:

В цикле, где вы создаете элемент управления (ы) добавить следующий обработчик

Addhandler YOURCONTROL.Clicked, AddressOf Textbox_Clicked 

... и тогда это будет обрабатывать событие щелчка

Private Sub Textbox_Clicked(sender as object, e as RoutedEventArgs) 

Dim tbClicked = Ctype(sender, TextBox) 
'You can now access any of the properties of the textbox, for example 

Dim txt as String = tbClicked.Text 
Dim name as String = tbClicked.Name 
Dim height as Double = tbClicked.Height 

End Sub 
+0

Ваш ответ предполагает WPF. Поскольку Хешем никогда не указывал, вы можете * быть правильным в этом предположении, но я скорее сомневаюсь в этом. –

+0

Собственно, учитывая комментарий, он просто добавил к моему ответу, я бы сказал, что в значительной степени уверен, что он использует WinForms. –

+0

спасибо за ваше время, но вот 'Dim tbClicked = Ctype (sender, TextBox)' Я хочу заменить 'sender' на некоторое строковое имя, подобное' 'TEXT_BOX_1'', потому что я хочу, чтобы кнопка не была текстовым полем. – 2013-02-26 14:18:17

7

Как быстро полезный совет, чтобы не e, вам, похоже, не нужно указывать тип элемента управления в выражении CType для доступа к элементу управления в вашей форме. Я столкнулся с этим при попытке доступа к нескольким типам элементов управления формой, таких как кнопки и текстовые поля, все с одинаковой строкой кода.

CType(Controls("NAME_OF_CONTROL"), Control) 

Обратите внимание, что, вместо того чтобы задавать точно, какой тип контроля, такие как «TextBox» или «Button», вы просто состояние «Control». Это позволяет вам универсально изменять любой тип управления, не указывая его тип.

Я не мог найти это нигде, поэтому я думал, что поделюсь им!

0

Ниже приведен код.

Dim oObj As Object = Me.Controls.Find("control name", True).FirstOrDefault() 
Obj.Property = Value 

Надеюсь, это поможет.

0
Dim sometext As TextBox = CType(Me.Controls("sometext "), TextBox) 
+4

Благодарим вас за этот фрагмент кода, который может предоставить некоторую ограниченную немедленную помощь. Правильное объяснение [значительно улучшило бы] (// meta.stackexchange.com/q/114762) его долгосрочную ценность, показав * почему * это хорошее решение проблемы и сделало бы его более полезным для будущих читателей с другие, подобные вопросы. Пожалуйста, отредактируйте свой ответ, чтобы добавить какое-то объяснение, включая сделанные вами предположения. –

Смежные вопросы