2014-12-03 1 views
0

텍스트 상자가있는 패널로 구성된 사용자 정의 컨트롤이 있습니다. TextBox의 Text 속성을 노출 할 수 있도록 UserControl의 Text 속성을 재정의했습니다.복합 컨트롤 Textbox는 폼에 놓을 때 컨트롤 이름을 기본값으로 지정합니다.

<BindableAttribute(False)> 
    <EditorBrowsable(EditorBrowsableState.Always), Browsable(True), _ 
    DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), DefaultValue("")> 
    Public Overrides Property Text() As String 
    Get 
     Return txtText.Text 
    End Get 
    Set(value As String) 
     txtText.Text = value 
    End Set 
    End Property 

이 방법을 사용하면이 속성을 사용하여 TextBox의 Text 값을 설정할 수 있습니다. 내가 가진 문제는 폼에 컨트롤을 추가 할 때 컨트롤의 이름이 TextBox에서 끝나는 것입니다. 이 컨트롤을 폼에 추가 할 때마다 수동으로 Text 속성으로 이동하여 값을 삭제해야합니다. 그 행동을 재정의 할 방법을 찾고 있습니다. 폼에 컨트롤을 추가 할 때 텍스트 값을 String.Empty로 지정합니다.

아이디어가 있으십니까? 나는 몇 시간을 둘러 보았고 아무것도 찾을 수 없었다. 내가 찾은 많은 스레드는 ASP.NET과 관련이 있습니다. 이것은 내가 작업하는 표준 Windows 양식입니다.

감사

+0

이것은 기본 동작입니다. 귀하의 양식에 새 레이블을 작성하고 이름 == 텍스트; 새 GroupBox 및 Name == Text를 추가하십시오. 새로운 TextBox가 만들어 졌을 때 UC가 UC 캔버스에 추가 될 때 이전에 완료된 UC가있는 경우 NET이이를 재정의합니다. – Plutonix

+0

오른쪽. TextBox의 경우 새로 추가 된 TextBox에서 Flash가 사라지기 전에 해당 이름의 플래시를 볼 수 있습니다. 나는이 아이디어를 내일 한 번 시도해보고 어떻게 작동하는지 살펴볼 것입니다. 이 동작을 무시할 수있는 방법이 있다고 생각할 수 있습니다. –

답변

1

NameText 두 개의 서로 다른 속성입니다!

Namecontrolname1과 같습니다. TextBox의 Text 속성을 실수로 UserControl 내부의 "TextBox"으로 설정했을 수 있습니다. 거기에 그것을 삭제하십시오!


UPDATE는

윈폼 디자이너가 자체적으로이 텍스트를 추가하는 것 같다. 당신은이 같은 문제를 해결할 수 :

우리가 디자인 모드에 있고 값이 제어 이름과 숫자에 해당하는 경우 텍스트가 설정되지 않은
Imports System.ComponentModel 
Imports System.Text.RegularExpressions 

Public Class UserControl1 
    Private _designMode As Boolean 

    Public Sub New() 
     InitializeComponent() 
     _designMode = LicenseManager.UsageMode = LicenseUsageMode.Designtime 
    End Sub 

    <BindableAttribute(False)> _ 
    <EditorBrowsable(EditorBrowsableState.Always), Browsable(True), _ 
     DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), _ 
     DefaultValue("")> _ 
    Public Overrides Property Text() As String 
     Get 
      Return txtText.Text 
     End Get 
     Set(ByVal value As String) 
      If Not _designMode OrElse _ 
       Not Regex.IsMatch(value, Me.GetType().Name & "\d+") Then 
       txtText.Text = value 
      End If 
     End Set 
    End Property 
End Class 

. 이렇게하면 디자인 타임에 텍스트를 설정할 수 있습니다. 디자인 타임에 텍스트를 설정할 필요가없는 경우 조건의 Regex 부분을 삭제할 수 있습니다.

+0

다른 속성이라는 것을 알고 있습니다. 이 컨트롤은 매우 기본입니다. .Text 속성이 위에 포함 된 코드의 유일한 위치입니다. Set에서 txtEdit.Text = value를 주석 처리하면 컨트롤의 이름이 TextBox에 없습니다. 폼에 새 사용자 정의 컨트롤을 추가 할 때 일어나는 일과 관련이 있다고 생각합니다. 때로는 Text 속성이 컨트롤의 이름으로 설정됩니다. 예를 들어 GroupBox를 놓으면 GroupBox1의 캡션이 표시됩니다. 캡션은 Text 속성입니다. 나는 재산을 무시하는 것이 이것을 제거 할 것이라고 생각했다. –

+0

내가하고 싶은 말은 : 디자이너에서 UserControl을 열고 TextBox를 선택하고 TextBox 속성이 비어 있는지 확인하십시오 (속성 격자에서). 비어있는 경우 양식에 UserControls를 삭제할 수 있어야하며 비워 두어야합니다. –

+0

Text 속성이 비어 있습니다. 재정의 된 Text 속성에도 불구하고 VB에서하고있는 것처럼 느껴집니다. Text 대신 TextValue라는 속성을 만들고 TextBox의 값을 가져오고 설정하는 데 사용하면 제대로 작동합니다. 재정의 된 Text 속성을 사용할 때만 문제가됩니다. –

관련 문제