C# Winforms标签组件
标签不是我要找的正确的词,但由于没有更好的选择,我用的就是标签。我想知道的是,是否有一个组件或任何我可以使用的东西,将创建一个类似于这个网站的标签字段的输入 基本上,我想要一个与这里使用的字段完全相同的字段。当您键入一个可能选项的列表时,该列表变为可用,并且一旦选择了一个选项,您就可以继续选择另一个选项。除非是我还没想到的名字,否则我在任何搜索中都找不到C# Winforms标签组件,c#,winforms,components,C#,Winforms,Components,标签不是我要找的正确的词,但由于没有更好的选择,我用的就是标签。我想知道的是,是否有一个组件或任何我可以使用的东西,将创建一个类似于这个网站的标签字段的输入 基本上,我想要一个与这里使用的字段完全相同的字段。当您键入一个可能选项的列表时,该列表变为可用,并且一旦选择了一个选项,您就可以继续选择另一个选项。除非是我还没想到的名字,否则我在任何搜索中都找不到 还有什么我可以得到我想要的吗?正如我在评论中所写的那样,自己做起来非常简单(我只花了约15分钟就给你写了下面的例子)这里是一个代码示例+输出
还有什么我可以得到我想要的吗?正如我在评论中所写的那样,自己做起来非常简单
(我只花了约15分钟就给你写了下面的例子)这里是一个代码示例+输出用于开始-“标记标签”对象,带有一个按钮来处理自己,请阅读我的评论。
澄清:此代码需要改进以适应所有可能的情况,但您可以从中了解如何创建自定义控件的基本思想
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FlowLayoutPanel1.Padding = New Padding(3, 3, 3, 3)
Dim g As Graphics = Me.CreateGraphics()
Dim size As SizeF
' check how much width needed for the string "Winforms"...'
size = g.MeasureString("Winforms", Me.Font)
Dim tagwinforms As New TagObject("Winforms", size.Width + TagObject.BtnRemoveWidth + 20, FlowLayoutPanel1.Height - 8)
tagwinforms.Init()
FlowLayoutPanel1.Controls.Add(tagwinforms)
' check how much width needed for the string "C#"...'
size = g.MeasureString("C#", Me.Font)
Dim tagcsharp As New TagObject("C#", size.Width + TagObject.BtnRemoveWidth + 20, FlowLayoutPanel1.Height - 8)
tagcsharp.Init()
FlowLayoutPanel1.Controls.Add(tagcsharp)
g.Dispose()
End Sub
End Class
Public Class TagObject
Inherits Label
Public Shared Property BtnRemoveWidth As Int16 = 20
Public Shared Property BtnRemoveHeight As Int16 = 20
' note: you can add get set methods and in the set method you can change value in runtime '
Public Property DescriptionText As String
Private Property TagHeight As Int16
Private Property TagWidth As Int16
Private btnRemove As PictureBox
' you can add any property you need backcolor forecolor etc...'
Sub New(ByVal descriptionText As String, ByVal width As Int16, ByVal height As Integer)
Me.DescriptionText = descriptionText
Me.TagHeight = height
Me.TagWidth = width
Me.Font = New Font("ARIAL", 8, FontStyle.Bold)
End Sub
Public Sub Init()
Me.Text = DescriptionText
Me.Width = TagWidth
Me.Height = TagHeight
Me.TextAlign = ContentAlignment.MiddleCenter
Me.BackColor = Color.FromArgb(30, 30, 30)
Me.ForeColor = Color.White
btnRemove = New PictureBox()
btnRemove.Height = BtnRemoveHeight
btnRemove.Width = BtnRemoveWidth
btnRemove.Location = New Point(TagWidth - btnRemove.Width - 1, TagHeight / 2 - btnRemove.Height / 2)
' original image url: https://www.google.co.il/search?q=close+icon+free&safe=off&rlz=1C1ASUM_enIL700IL700&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjVuJnbk5vZAhXKesAKHRXqDX8Q_AUICigB&biw=1440&bih=769#imgrc=2p_iHiqieStqCM:'
btnRemove.Image = My.Resources.CloseIcon
btnRemove.Cursor = Cursors.Hand
AddHandler btnRemove.Click, AddressOf btnRemove_Click
Me.Controls.Add(btnRemove)
End Sub
Private Sub btnRemove_Click(sender As Object, e As EventArgs)
' the user wants to delete this tag...'
Me.Dispose()
End Sub
End Class
输出:
尝试一下,这是一种非常简单的方法,一种方法是创建一个继承
标签的类,并编写代码来提供所需的功能(文本、图像、单击事件处理程序来处理对象等)。此外,您还可以将自定义“标记”对象添加到FlowLayoutPanel
控件中,我的行为将与图片中显示的行为相同。这只是一个复选框,其外观=按钮,FlatStyle=Flat和一个指示检查状态的图像。我认为您可以使用一个面板(左侧包含listview,右侧包含一个文本框)执行类似操作