Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Выборка по индексу Добавлено: 24.03.06 19:24  

Автор вопроса:  yxaxa
значить динамически создаю я своими корявыми руками элементы. ну код приведу на всяк случай.
'''''''''.........''''''''''''''''''
Dim DesktopDir As String = My.Computer.FileSystem.SpecialDirectories.Desktop
        Dim link() As String = IO.Directory.GetFiles(DesktopDir)
        Dim i As Integer
        Dim x As Integer = 20
        Dim y As Integer = 15
        For i = 0 To link.Length - 1
            draw_link(link(i), x, y, i)
            y = y + 77
            If y >= Me.Height - MenuStrip1.Height - 45 Then
                x = x + 75
                y = 15
            End If
        Next
'''''''''..........''''''''''''''''''''
Private Sub draw_link(ByVal path As String, ByVal x As Integer, ByVal y As Integer, ByVal i As Integer)
        Dim ico As New PictureBox
        ico.Location = New Point(x, y)
        ico.Size = New Size(32, 32)
        ico.Visible = True
        ico.BackColor = Color.Blue
        ico.Tag = i
        Dim txt As New Label
        txt.AutoSize = True
        txt.Visible = True
        txt.Text = Mid(path, path.LastIndexOf("\") + 2)
        If txt.Text.Length > 13 Then txt.Text = Mid(txt.Text, 1, 10) & "..." '& Chr(13)
        txt.Location = New Point(x - txt.Text.Length / 2, y + 37)
        txt.Font = New Font(txt.Font.FontFamily, 8)
        txt.BackColor = Color.Transparent
        txt.ForeColor = Color.WhiteSmoke
        txt.TextAlign = ContentAlignment.MiddleCenter
        If Mid(txt.Text, txt.Text.LastIndexOf(".") + 2) = "txt" Then
            ico.Image = My.Resources.text.ToBitmap
            ico.BackColor = Color.Transparent
        End If
        Me.Controls.Add(txt)
        Me.Controls.Add(ico)
        Me.Controls.SetChildIndex(ico, i)
        AddHandler ico.Click, AddressOf ico_click
End Sub
Private Sub ico_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
sender.backcolor = Color.Red
End Sub


 Me.Controls.SetChildIndex(ico, i)
вот тута каждому пикчербоксу устанавливаю индекс
в обработчике клика на какую картинку кликаем та закрашиваеца
но таким образом можно закрасить все картинки что есть
как добавить в обработчик что по какой картинке кликнул та закрашиваеца а у остальных фон стандартный становится (транспарент) то бишь сделать выборку по индексам которые я присваивал и присвоить им фон транспарент кроме той картинки на которую кликнули?
мммм и еще посмотрите плиз динамическое создание текстбоксов мне нужно чтоб под картинкой надпись ровно по центру была. ну как под ярлыками на раб столе, а у мя коряво, подскажите как сделать ровно)))

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 24.03.06 20:04
Лучше сделать массив

Dim ctls As PictureBox()


А лучше даже

Dim ctls As New System.Collections.Generic.List(Of PictureBox)


Запихивать контролы туа при создании:

ctls.Add(ico)


Потом в обработчике клика делать примерно так:

For Each ico As PictureBox In ctls
  If ico Is sender Then
     ico.backcolor = Color.Red
  Else
     ico.BackColor = Color.LightGray
  End If
Next


Ответить

Номер ответа: 2
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 24.03.06 21:32
yxaxa , а зачем вообще тебе эти индексы сдались? В .NET можно великолепно обходиться и без них..

Павел, к чему создавать дополнительную коллекцию,когда у него есть готовая Me.Controls Почему бы в обработчике клика не сделать следующее?

        For Each Ctrl As Control In Me.Controls
            If TypeOf (sender) Is PictureBox Then
                If Ctrl Is sender Then
                    Ctrl.BackColor = Color.Red
                Else
                    Ctrl.BackColor = Color.Transparent
                End If
            End If
        Next

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 24.03.06 21:48
А так гибче...
Повесит автор еще один PictureBox (скажем, своё фото повесит туды) и всё нафик посыпется...

вообще я бы сделал отдельный UserControl, включающий PictureBox и TextBox, и еще один, который на входе получает путь к папке и показывает все эти контролы внутри себя...

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 24.03.06 22:02
Что касается отрисовки текста, то тут мне видится 3 решения:
1.Позиционирование Label
- AutoSize = False
- Width=48
- Используя System.Drawing.Graphics.MeasureString получаешь и устанавливаешь высоту Label'a исходя из текста,шрифта и формата текста..
И единственное,что тебе останется так это выровнять твой Label по центру PictureBox.

2. Создать свой контрол,имитирующий Ярлык, в котором через GDI отрисовать все,что тебе нужно

3.Поскольку ты используешь VS 2005, то для позиционирования можно использовать TableLayoutPanel

Второй вариант (имхо) более предпочтителен и гибче, так как избавит от необходимости позиционировать каждый PictureBox & Label в отдельности..

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам