Элемент управления наподобии выпадающего списка IE8

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

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

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Элемент управления наподобии выпадающего списка IE8

Сообщение Admiralisimys » 12.07.2010 (Пн) 11:41

Добрый день.
Дабы не подымать старую тему Свой элемент управления создал новую.

В IE8 Address Bar имеет возможность убирать строчку со списка одним нажатием прямо в выпадающем списке -> http://www.winsupersite.com/images/live/ie8_rev_05.jpg
На скрине это маленький красный "х". Если скрин не открывается см здесь http://www.winsupersite.com/live/ie8_03.asp скрин с подписью The Smart Address bar queries your History, Favorites, and RSS feeds as you type.

В настоящий момент накидал следующий код
Код: Выделить всё
'%SystemRoot%\Microsoft.NET\Framework\v1.1.4322\vbc IE8_UI.vb /r:System.dll,System.Drawing.dll,System.Windows.Forms.dll
Imports System
Imports System.Drawing
Imports System.Windows.Forms

Class MyCheckBox
    Inherits CheckBox
    Public Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As IntPtr, ByVal lpszExeFileName As String, ByVal nIconIndex As Integer) As IntPtr
    Protected Overrides Sub OnPaint(ByVal pea As PaintEventArgs)
        'MyBase.OnPaint(pea)
        Dim g As Graphics = pea.Graphics
        g.FillRectangle(New SolidBrush(Me.BackColor), New RectangleF(0, 0, Me.Size.Width, Me.Size.Height))
        g.DrawString(Me.Text, Font, Brushes.Black, 0, 0)
        If Me.Checked Then
            'g.DrawIcon(Icon.ExtractAssociatedIcon('"<File\Path.ico>"'), New Rectangle(Me.Size.Width - 16, 0, 16, 16))
            g.DrawIcon(Icon.FromHandle(ExtractIcon(IntPtr.Zero, "Shell32.dll", 131)), New Rectangle(Me.Size.Width - 16, 0, 16, 16))
        Else
            g.DrawIcon(Icon.FromHandle(ExtractIcon(IntPtr.Zero, "Shell32.dll", 146)), New Rectangle(Me.Size.Width - 16, 0, 16, 16))
        End If
    End Sub
    Protected Overrides Sub OnClick(ByVal ea As EventArgs)
        If (Me.PointToClient(Me.Cursor.Position).X) > (Me.Size.Width - 16) Then MyBase.OnClick(ea)
    End Sub
End Class

Class MyComboBox
    Inherits ComboBox
    Protected Overrides Sub OnDragDrop(ByVal drgevent As System.Windows.Forms.DragEventArgs)
        MyBase.OnDragDrop(drgevent)
    End Sub
End Class

Class TestMyUIElements
    Inherits Form
    Shared Sub Main()
        Application.Run(New TestMyUIElements())
    End Sub
    Sub New()
        Dim Check1 As New MyCheckBox
        Check1.Parent = Me
        Check1.Text = "Check1 Text"
        Check1.Location = New Point((Me.ClientSize.Width - Check1.Size.Width) / 2, (Me.ClientSize.Height - Check1.Size.Height) / 2)

        'Dim ComboBox1 As New MyComboBox
        'ComboBox1.Parent = Me
        ''ComboBox1.Text = "ComboBox1 Text"
        'Dim str() As String = {"Каждый", "Охотник", "Желает", "Знать", "Где", "Сидит", "Фазан"}
        'For Each OneStr As String In str
        '    ComboBox1.Items.Add(OneStr)
        'Next
        'ComboBox1.SelectedIndex = 0
        'ComboBox1.Location = New Point((Me.ClientSize.Width - ComboBox1.Size.Width) / 2, (Me.ClientSize.Height - ComboBox1.Size.Height) / 2)

    End Sub
End Class


В данном коде на строку с (Me.Cursor.Position) выдаётся предупреждение
'Warning 1 Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.

Идея проста, переопределяю свойства флажка (сейчас две иконки, на два состояния, а не одна как в IE8) с дальнейшим внедрением его в выпадающий список. Вот с последним возникли трудности: что указывать в Protected Overrides Sub OnDragDrop(ByVal drgevent As System.Windows.Forms.DragEventArgs).
Верным ли путём иду? Быть может достаточно переопределение выпадающего списка?
Заранее спасибо.

P.S.
Здесь http://www.codeproject.com/KB/combobox/ ... bobox.aspx был, но суть не уловил (не из-за того что на C#).

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Элемент управления наподобии выпадающего списка IE8

Сообщение FireFenix » 12.07.2010 (Пн) 13:30

IE9 точно, и по моему IE8 написан под WPF и там такой заморочки с вложением контролов нету

Т.е. т.к. делается кастомный интерфейс, может стоит перейти на WPF?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Элемент управления наподобии выпадающего списка IE8

Сообщение Joo » 14.07.2010 (Ср) 5:24

FireFenix писал(а):IE9 точно

Откуда такие сведения?
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог


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

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

Сейчас этот форум просматривают: Google-бот и гости: 8

    TopList