Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Визуальные компоненты в режиме Runtime
Форум программистов > Системное программирование > .NET
Sulik
Как возможно создавать компоненты в режиме Runtime, т.е, допустим, что я хочу при нажатии кнопки, на форме создавался label? Какими методами необходимо оперировать?
sax_ol
new, Control.Controls.Add
Sulik
sax_ol, можешь показать пример с лейблом?

sax_ol, можешь показать пример с лейблом?
sax_ol
Вы сначала расскажите - сами пробовали? Как, покажите пробы ...
Electro
Цитата(Sulik @ 26:03:2008, 15:20 ) *
Как возможно создавать компоненты в режиме Runtime, т.е, допустим, что я хочу при нажатии кнопки, на форме создавался label? Какими методами необходимо оперировать?

проще всего заглянуть в файл xxx.Designer.cs
ljuter
При нажатии на элемент меню (например "Новый") на форме программно создается Panel1. Как определить создан элемент на форме или нет? Мне надо сделать чтобы сколько не жать на меню, Panel1 создавался только один раз.
sax_ol
Как создаете?
ljuter
CODE
Public Class Form1

Public Class panel_in_out
Inherits Panel
Dim ParentForm As Form
Dim myPanel As panel_in_out
Dim textBox1 As TextBox
Dim label1 As Label
Dim button1 As Button
'left
Dim x As Integer
'top
Dim y As Integer

Public Sub CreatePanel(ByVal parentForm, ByVal x, ByVal y)
textBox1 = New TextBox()
label1 = New Label()
button1 = New Button()
' Initialize the Panel control.
Me.Name = "Panel"
Me.Location = New Point(x, y)
Me.Size = New Size(parentForm.Width \ 2, parentForm.Height - y)
' Set the Borderstyle for the Panel to three-dimensional.
Me.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D

' Initialize the Label, TextBox controls and button.
label1.Location = New Point(16, 16)
label1.Text = "label1"
label1.Size = New Size(104, 16)
textBox1.Location = New Point(16, 32)
textBox1.Text = ""
textBox1.Size = New Size(152, 20)
button1.Location = New Point(16, 52)
button1.Text = "Закрыть"
button1.Size = New Size(152, 20)

' Add the Label and TextBox controls to the Panel.
Me.Controls.Add(label1)
Me.Controls.Add(textBox1)
Me.Controls.Add(button1)

' Add the Panel control to the form.
parentForm.Controls.Add(Me)

AddHandler button1.Click, AddressOf myClick1

End Sub

Public Sub myClick1(ByVal sender As Object, ByVal e As EventArgs)
Me.Dispose()
End Sub

End Class

' Создается панель на форме
Private Sub ОбменToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ОбменToolStripMenuItem.Click
Dim panel1 As New panel_in_out
panel1.CreatePanel(Me, 0, MenuStrip1.Height)
End Sub

End Class
sax_ol
А, ну тогда шерстите колекцию контролов формы, на интересующий ваш момент, т.е. цикл.
ljuter
Цитата(sax_ol @ 24:04:2008, 12:00 ) *
А, ну тогда шерстите колекцию контролов формы, на интересующий ваш момент, т.е. цикл.

Так что ли?
Код
For i = 0 To Me.Controls.Count
if me.Controls.Item is (что должно быть?)
        Next
sax_ol
Код
For i = 0 To Me.Controls.Count
  if me.Controls.Item is Panel And CType(me.Controls.Item, Panel).Name = "(то что задали)"
       нашли!



А, в вашем случае еще проще, хватит проверки на конкретный тип - panel_in_out.
ljuter
Если пишу
Код
For i = 0 To Me.Controls.Count
  if me.Controls.Item is panel_in_out And CType(me.Controls.Item, panel_in_out).Name = "(то что задали)"

то выдает ошибку
Код
Ошибка1    "panel_in_out" является типом и не может использоваться как выражение.

Если просто
Код
For i = 0 To Me.Controls.Count
  if CType(me.Controls.Item, panel_in_out).Name = "(то что задали)"

то ругается на другие компоненты на форме:
Код
Не удалось привести тип объекта "System.Windows.Forms.Label" к типу "panel_in_out"
sax_ol
Цитата(ljuter @ 24:04:2008 - 12:39) *
является типом и не может использоваться как выражение
Вам надо проверить на тип, как ..., я незнаю ВБ (и знать не хочу wink.gif), поэтому вы уж сами найдите это в справке.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2008 IPS, Inc.