Страница: 1 |
Страница: 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-сайт:
Профиль | | #1
Добавлено: 24.03.06 20:04
Лучше сделать массив
А лучше даже
Запихивать контролы туа при создании:
Потом в обработчике клика делать примерно так:
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 Почему бы в обработчике клика не сделать следующее?
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-сайт:
Профиль | | #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 в отдельности..