Дабы не подымать старую тему Свой элемент управления создал новую.
В 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#).