Создание массива Label с индексами

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

svgrig0777
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 23.11.2009 (Пн) 11:13

Создание массива Label с индексами

Сообщение svgrig0777 » 17.12.2009 (Чт) 0:34

В VB 6 можно копированием создать массив элементов Label. Он спрашивал - хотите создать Arrey и создавал например Label4(0) и так далее.
Как это реализовать в VB.NET? Спасибо!

====== Viter.Alex ===========
Да много мучился создал массив Но это такой геморрой. Мне явно не подходит.
Дорогой Viter.Alex, ты просто супер! Обработчик кликов по разным надписям это здорово.
Теперь не знаю как определить какую надпись нажали - раньше был Index.
Придется искать активную надпись в цикле
Последний раз редактировалось svgrig0777 22.12.2009 (Вт) 0:46, всего редактировалось 3 раз(а).

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Создание массива Label с индексами

Сообщение MIT » 17.12.2009 (Чт) 0:51

Создать кучу лейблов с помощью дизайнера, добавить глобальную переменную MyLabels() as Label, а в собитии Load написать что-то типа
Код: Выделить всё
Redim MyLabels(5)
MyLabels(0)=Label1
MyLablels(1)=label2
и т.д..
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Создание массива Label с индексами

Сообщение Денис » 17.12.2009 (Чт) 8:54

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


Глупости. Создавать в цикле и ставить на форму оттуда же.
Код: Выделить всё

MyLabels(32) = new Label ' или = new MyExtLabel если есть контрол с дополнителнительным функционалом

MyLabels(32).parent = me 'Ставим на форму
MyLabels(32).visible = true 'Делаем видимым (если не видно), кроме того, можно задать Top, Left и т.п.
AddHandler MyLabels(32).Click, AddressOf SubCommonClick 'Добавляем процедуру для обработки событий
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Создание массива Label с индексами

Сообщение viter.alex » 21.12.2009 (Пн) 1:32

В VB6 массив был нужен для того, чтобы обрабатывать несколько контролов одной процедурой.
svgrig0777 писал(а):В VB 6 можно копированием создать массив элементов Label. Он спрашивал - хотите создать Arrey и создавал например Label4(0) и так далее.Как это реализовать в VB.NET?

Судя по вопросу, не стоит задача программно создать массив Labels. Если тебе просто нужно завязать несколько контролов на одну процедуру, то это можно сделать буквально несколькими движениями мыши.
После каждой процедуры, обрабатывающей то или иное событие контрола, стоит ключевое слово Handles, после которого написано какое событие какого контрола обрабатывать данной процедурой. Но контролов и событий можно указать сколько угодно через запятую. Например, есть процедура, автоматически созданная при двойном клике на контроле:
Код: Выделить всё
   Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

   End Sub

Добавим ещё события, которые будет обрабатывать эта процедура:
Код: Выделить всё
   Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click, Label2.Click, Label3.Click, Form1.Load

   End Sub
Лучше день потерять — потом за пять минут долететь!

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Re: Создание массива Label с индексами

Сообщение netdemon » 31.12.2009 (Чт) 1:32

Вот у меня подобная проблема. Вот такой код есть.
Код: Выделить всё
   Private SelectIndex As Integer
    Private pDrive() As PictureBox



    Private Sub frmDrive_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim cDrive As System.IO.DriveInfo

        Dim sDrive As String
        Dim iCount As Integer
        Dim i As Integer

        iCount = My.Computer.FileSystem.Drives.Count

        ReDim pDrive(iCount)
        For i = 0 To iCount - 1
            sDrive = My.Computer.FileSystem.Drives.Item(i).ToString
            cDrive = My.Computer.FileSystem.GetDriveInfo(sDrive)
            pDrive(i) = New PictureBox

            Me.Controls.Add(pDrive(i))
            Select Case cDrive.DriveType
                Case IO.DriveType.Fixed
                    pDrive(i).Image = My.Resources.rPanel.HARD.ToBitmap
                Case IO.DriveType.CDRom
                    pDrive(i).Image = My.Resources.rPanel.CDDVD.ToBitmap
                Case IO.DriveType.Network
                    pDrive(i).Image = My.Resources.rPanel.NET.ToBitmap
                Case IO.DriveType.NoRootDirectory
                    pDrive(i).Image = My.Resources.rPanel.netu.ToBitmap
                Case IO.DriveType.Ram
                    pDrive(i).Image = My.Resources.rPanel.RAM.ToBitmap
                Case IO.DriveType.Removable
                    pDrive(i).Image = My.Resources.rPanel.usb.ToBitmap
                Case IO.DriveType.Unknown
                    pDrive(i).Image = My.Resources.rPanel.usb.ToBitmap
            End Select

            pDrive(i).Left = 10 '+ i * pDrive(i).Height
            pDrive(i).Top = 10 + i * (pDrive(i).Height + 5)
            pDrive(i).BorderStyle = BorderStyle.None
            pDrive(i).BackColor = Color.Transparent
            'pDrive(i).Image = My.Resources.rPanel.HARD.ToBitmap
            pDrive(i).ContextMenuStrip = mnuDisk
            pDrive(i).Tag = sDrive
            Me.Height = pDrive(i).Top + pDrive(i).Height + 10

        Next i
    End Sub
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        Select Case m.Msg
            Case WM_NCHITTEST
                m.Result = IntPtr.op_Explicit(HTCAPTION)
                Return

        End Select
        MyBase.WndProc(m)
    End Sub


[img]file:///C:/Documents%20and%20Settings/Alex/Мои%20документы/Мои%20рисунки/1.JPG[/img]

Получается на форме динамически создаётся массив пик боксов. Каждый пик бокс отображает тип диска (Хард, СД и т.д.) Так вот как связать конкретный бокс с обработчиком события "Выбор пункта меню" Вот тут связь боксов с контекстным меню: pDrive(i).ContextMenuStrip = mnuDisk
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Создание массива Label с индексами

Сообщение MIT » 31.12.2009 (Чт) 1:37

AddHandler?

P.S.
netdemon писал(а):[img]file:///C:/Documents%20and%20Settings/Alex/Мои%20документы/Мои%20рисунки/1.JPG[/img]
lol
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Re: Создание массива Label с индексами

Сообщение netdemon » 31.12.2009 (Чт) 2:05

И как мне это может помочь.? Вот скрин. Мне надо знать на какой картинке я вызвал контекстное меню чтобы потом выяснить букву диска. т.е. узнать какой индекс в массиве пик боксов тот на котором я меню вызываю.
Вложения
1.JPG
1.JPG (11.47 Кб) Просмотров: 2011
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Создание массива Label с индексами

Сообщение MIT » 31.12.2009 (Чт) 2:25

Какбэ вопросы надо внятно формулировать...

MyMenu.SourceControl, не?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Re: Создание массива Label с индексами

Сообщение netdemon » 31.12.2009 (Чт) 2:33

MIT писал(а):Какбэ вопросы надо внятно формулировать...

MyMenu.SourceControl, не?

Код: Выделить всё
Private Sub ОткрытьToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ОткрытьToolStripMenuItem.Click
        MsgBox(mnuDisk.SourceControl.Tag)
    End Sub


Заработало :)
Вложения
2.JPG
2.JPG (25.38 Кб) Просмотров: 2010
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

    TopList