如何在运行时绘制文本框并让它在vb.net中拥有自己的索引?我试图像Microsoft PowerPoint如何绘制其文本框一样。你能帮我解决这个问题吗?
编辑:我附上了一张我真正想问你的照片。对不起,我无法正确地说出来。这是PP中单张幻灯片的照片。注意文本框的边缘,可以调整大小并编辑右边的文本吗?这就是我想在VB.net中做的事情。任何帮助人? Screenshot of a textbox in PP答案 0 :(得分:0)
也许这可以让你开始......
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim yCoord As Integer
For count As Integer = 0 To 10
Dim tBox As New TextBox()
yCoord += 20
Me.Controls.Add(tBox)
tBox.Location = New Point(0, yCoord)
tBox.Name = "tBox" & count.ToString()
Next
End Sub
End Class
答案 1 :(得分:0)
您可以尝试使用可调整大小的UserControl。
创建一个新的UserControl作为模板(德语,但你会发现它):
将BorderStyle
设置为FixedSingle
。
向Label
添加UserControl
。我称之为lblInner
:
现在进行一些编码,包括使用鼠标句柄在运行时调整UserControl的可能性。请注意,调整大小的代码使用Charles P.
的以下优秀Stack Overflow答案:
Custom Resize Handle in Border-less Form C#
Public Class MyBoxLabel
#Region "Constructor"
Public Sub New()
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
Me.lblInner.AutoSize = False
Me.lblInner.TextAlign = ContentAlignment.MiddleCenter
'Need a free border at the sides, or the mouse actions will not work properly
Me.lblInner.Location = New Point(3, 3)
Me.lblInner.Size = New Size(Me.ClientSize.Width - 7, Me.ClientSize.Height - 7)
Me.lblInner.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom Or AnchorStyles.Right Or AnchorStyles.Top
End Sub
#End Region
#Region "Properties"
''' <summary>
''' Allows you to change the inner text
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property InnerText As String
Set(value As String)
Me.lblInner.Text = value
End Set
Get
Return Me.lblInner.Text
End Get
End Property
''' <summary>
''' Allows you to change the inner font
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property InnerFont As Font
Set(value As Font)
Me.lblInner.Font = value
End Set
Get
Return Me.lblInner.Font
End Get
End Property
'Add further properties as needed
#End Region
#Region "Constants"
Const WM_NCHITTEST As UInt32 = &H84
Const WM_MOUSEMOVE As UInt32 = &H200
Const HTLEFT As UInt32 = 10
Const HTRIGHT As UInt32 = 11
Const HTBOTTOMRIGHT As UInt32 = 17
Const HTBOTTOM As UInt32 = 15
Const HTBOTTOMLEFT As UInt32 = 16
Const HTTOP As UInt32 = 12
Const HTTOPLEFT As UInt32 = 13
Const HTTOPRIGHT As UInt32 = 14
Const RESIZE_HANDLE_SIZE As Integer = 10
#End Region
#Region "Handling of Window Messages to allow resizing of the UserControl"
Protected Overrides Sub WndProc(ByRef m As Message)
Dim handled As Boolean = False
If m.Msg = WM_NCHITTEST OrElse m.Msg = WM_MOUSEMOVE Then
Dim formSize As Size = Me.Size
Dim screenPoint As New Point(m.LParam.ToInt32())
Dim clientPoint As Point = Me.PointToClient(screenPoint)
Dim boxes As New Dictionary(Of UInt32, Rectangle)() From { _
{HTBOTTOMLEFT, New Rectangle(0, formSize.Height - RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE)}, _
{HTBOTTOM, New Rectangle(RESIZE_HANDLE_SIZE, formSize.Height - RESIZE_HANDLE_SIZE, formSize.Width - 2 * RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE)}, _
{HTBOTTOMRIGHT, New Rectangle(formSize.Width - RESIZE_HANDLE_SIZE, formSize.Height - RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE)}, _
{HTRIGHT, New Rectangle(formSize.Width - RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE, formSize.Height - 2 * RESIZE_HANDLE_SIZE)}, _
{HTTOPRIGHT, New Rectangle(formSize.Width - RESIZE_HANDLE_SIZE, 0, RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE)}, _
{HTTOP, New Rectangle(RESIZE_HANDLE_SIZE, 0, formSize.Width - 2 * RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE)}, _
{HTTOPLEFT, New Rectangle(0, 0, RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE)}, _
{HTLEFT, New Rectangle(0, RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE, formSize.Height - 2 * RESIZE_HANDLE_SIZE)} _
}
For Each hitBox As KeyValuePair(Of UInt32, Rectangle) In boxes
If hitBox.Value.Contains(clientPoint) Then
m.Result = CType(hitBox.Key, IntPtr)
handled = True
Exit For
End If
Next
End If
If Not handled Then
MyBase.WndProc(m)
End If
End Sub
#End Region
End Class
编译您的项目。
在您的工具箱中,您将找到新的UserControl。将其添加到您的表单并启动您的应用程序。将鼠标移动到控件的边缘时,您将看到典型的调整大小鼠标光标。使用这些来调整控件的大小。由于标签的Anchor
属性和TextAlign
。