none
Usercontrol Instanzname als Text RRS feed

  • Frage

  • Hi,

    wenn man in Viusal Studio mit dem Form editor eine usercontrol erstellt, wird ja die Textproperty mit dem Namen der Instanz versehen. Wie kann ich das in meiner Usercontrol bewirken, dass der erzeugte Name auch als Text Property gewählt wird?

    Freitag, 17. August 2012 08:30

Antworten

  • Hi,

    Ich weiß nicht, ob ich das Problem richtig verstehe. Meinst du den Text, der bei "Name" steht, also z.B. wenn man 5 Textboxen erstellt in einer Form, dass diese TextBox1 bis TextBox5 heißen?

    Wenn nicht Name, sondern wirklich Text (was natürlich nur bei text-enthaltenden Objekten wie einem Label, einer Textbox oder Artverwandten Sinn ergibt), wäre es doch ein Leichtes, den einfach im Konstruktor vorzubelegen (Sub New), und z.B. die On-Paint zu überschreiben (Protected Overrides OnPaint(...)) und den dort sogar noch anzuzeigen (im Designer).

    Aber mir ist nicht ganz klar, ob es um den Namen oder einen Text geht.

    Nur mal so fix zum Testen gecoded:

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        End Sub
    End Class
    Public Class TestControl
        Inherits Control
        Public Sub New()
            Me.Text = Me.Name
        End Sub
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(e)
            With e.Graphics
                Dim TSize As SizeF = .MeasureString(Me.Text, Me.Font)
                .DrawString(Me.Text, Me.Font, New SolidBrush(Color.Black), New Point((Me.Width - TSize.Width) / 2, (Me.Height - TSize.Height) / 2))
            End With
        End Sub
    End Class
    

    Einfach mal so in nen leeres Projekt reinkopieren, erstellen, beenden und dann im Designer das Testcontrol einfügen in die Form. Ist es das, was du meintest?

    LG, Dennis.
    • Als Antwort markiert Mac Bath Freitag, 24. August 2012 12:45
    Montag, 20. August 2012 11:21

Alle Antworten

  • Hi,

    ehrlich gesagt hab ich nicht verstanden, was Du meinst. Kannst Du das bitte etwas detaillierter formulieren?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 17. August 2012 08:53
    Moderator
  • Also wenn ich in Visual Studio ein neues Label einfüge, dann wird dieses ja benannt mit Label1, Label2, usw.

    Dies geschiet auch mit einem eingefügten usercontrol.

    Beim Label wird zusätzlich die Property Text standardmäßig mit Label1, Label2, usw. gefüllt.

    Und das ist das was ich mit meinem Steuerelement erreichen möchte, dass bei meinem usercontrol die Textproperty mit dem Namen des usercontrols gefüllt wird.

    Freitag, 17. August 2012 09:00
  • Hallo

    Benutzersteuerelemente sind Container (wie z. B. ein Panel).
    Und da sie mit der Text-Eigenschaft nichts anfangen können ist sie ausgeblendet.
    Deswegen steht die Frage: Wozu soll das überhaupt gut sein?

    (Und um es zu ändern, müsstest Du einen eigenen UserControlDesigner stricken).

    Gruß Elmar

    Freitag, 17. August 2012 14:05
    Beantworter
  • Hi, das hat mich einfach einmal interessiert, da ich gerade mit Benutzersteuerelementen experimentiere. Habe die Text Property allerdings schon in den Designer gebracht. Ist also über die EIgenschaftenleiste verfügbar.
    Montag, 20. August 2012 10:04
  • Hi,

    Ich weiß nicht, ob ich das Problem richtig verstehe. Meinst du den Text, der bei "Name" steht, also z.B. wenn man 5 Textboxen erstellt in einer Form, dass diese TextBox1 bis TextBox5 heißen?

    Wenn nicht Name, sondern wirklich Text (was natürlich nur bei text-enthaltenden Objekten wie einem Label, einer Textbox oder Artverwandten Sinn ergibt), wäre es doch ein Leichtes, den einfach im Konstruktor vorzubelegen (Sub New), und z.B. die On-Paint zu überschreiben (Protected Overrides OnPaint(...)) und den dort sogar noch anzuzeigen (im Designer).

    Aber mir ist nicht ganz klar, ob es um den Namen oder einen Text geht.

    Nur mal so fix zum Testen gecoded:

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        End Sub
    End Class
    Public Class TestControl
        Inherits Control
        Public Sub New()
            Me.Text = Me.Name
        End Sub
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(e)
            With e.Graphics
                Dim TSize As SizeF = .MeasureString(Me.Text, Me.Font)
                .DrawString(Me.Text, Me.Font, New SolidBrush(Color.Black), New Point((Me.Width - TSize.Width) / 2, (Me.Height - TSize.Height) / 2))
            End With
        End Sub
    End Class
    

    Einfach mal so in nen leeres Projekt reinkopieren, erstellen, beenden und dann im Designer das Testcontrol einfügen in die Form. Ist es das, was du meintest?

    LG, Dennis.
    • Als Antwort markiert Mac Bath Freitag, 24. August 2012 12:45
    Montag, 20. August 2012 11:21
  • Ja. Genau das hatte ich gesucht. Vielen dank dafür.
    Freitag, 24. August 2012 12:46